在linux服务器上,php连接mysql最标准且推荐的做法是使用pdo(php data objects)扩展。通过实例化pdo类并传入包含主机、数据库名、用户名和密码的dsn字符串,即可建立连接。若连接成功,将返回一个pdo对象实例;若失败,则抛出pdoexception异常,因此必须使用try-catch结构来捕获错误并进行处理。

如何配置PDO连接参数以支持UTF-8编码
为了确保中文数据在存储和读取时不乱码,必须在连接字符串中显式指定字符集为utf8mb4。这可以通过在DSN末尾添加参数来实现,或者在创建<code>PDO实例后设置属性PDO::MYSQL_ATTR_INIT_COMMAND。推荐使用前者,因为它在连接建立之初就生效,避免了后续命令执行的开销。

$dsn = 'mysql:host=127.0.0.1;dbname=test_db;charset=utf8mb4';
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
];
try {
$pdo = new PDO($dsn, 'username', 'password', $options);
echo "Connection successful";
} catch (PDOException $e) {
echo "Connection failed: " . $e->getMessage();
}
如何处理连接超时或拒绝访问的错误
当MySQL服务未启动、端口被防火墙拦截或凭证错误时,PDO构造函数会立即抛出异常。开发者应检查getMessage()返回的具体错误信息,例如“Access denied”表示权限问题,“Connection refused”表示网络或服务不可达。在生产环境中,不应直接暴露这些详细错误给用户,而应记录日志并显示通用错误提示。
立即学习“PHP免费学习笔记(深入)”;

// 模拟连接失败场景
$dsn = 'mysql:host=192.168.1.100;dbname=test_db;charset=utf8mb4';
try {
$pdo = new PDO($dsn, 'wrong_user', 'wrong_pass');
} catch (PDOException $e) {
// 实际项目中应记录日志而非直接输出
error_log('DB Error: ' . $e->getMessage());
die("Database connection unavailable.");
}
基于PDO对象验证连接是否真正可用
仅仅实例化PDO对象并不一定意味着连接已经物理建立,因为PDO默认采用懒加载机制。为了验证连接是否真正可用,可以执行一个简单的查询如SELECT 1或使用ping()方法。如果服务器响应正常,说明连接畅通;否则需重新连接或排查网络问题。



















