PHP 5.1起内置PDO扩展,通过统一接口操作数据库;需启用pdo及对应驱动扩展,构造正确DSN(如mysql:host=localhost;dbname=test;charset=utf8mb4),实例化PDO并设ERRMODE_EXCEPTION,用prepare/exec/query进行安全操作。

PHP 5.1 起正式内置 PDO 扩展,它不依赖具体数据库驱动,而是通过统一接口操作不同数据库。连接数据库的核心是 PDO 类构造函数,配合正确的 DSN(数据源名称)和认证参数即可完成初始化。
确认 PDO 扩展已启用
在 php.ini 中确保以下两行未被注释(即前面没有分号):
- extension=php_pdo.dll(Windows)或 extension=pdo.so(Linux/macOS)
- extension=php_pdo_mysql.dll(MySQL)或对应数据库扩展(如 pdo_pgsql.so、pdo_sqlite.so)
修改后需重启 Web 服务器(如 Apache 或 Nginx),可用 phpinfo() 检查 “PDO” 和 “pdo_mysql” 是否出现在扩展列表中。
构造合法的 DSN 字符串
DSN 是 PDO 连接的关键,格式为:驱动名:host=主机;port=端口;dbname=数据库名;charset=字符集。常见 MySQL 示例:
立即学习“PHP免费学习笔记(深入)”;
mysql:host=localhost;dbname=test;charset=utf8mb4mysql:host=127.0.0.1;port=3307;dbname=myapp;charset=utf8mb4- 仅连接服务器(不选库):
mysql:host=localhost(用于创建/删除数据库)
注意:charset=utf8mb4 推荐替代旧式 utf8,以完整支持 emoji 和四字节 Unicode 字符。
实例化 PDO 对象并设置错误模式
直接 new PDO 并捕获异常,同时建议立即设置错误处理方式,避免静默失败:
try {
$dsn = 'mysql:host=localhost;dbname=test;charset=utf8mb4';
$pdo = new PDO($dsn, 'root', 'password');
// 推荐:抛出异常便于调试
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 可选:返回关联数组而非数字索引
$pdo->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
} catch (PDOException $e) {
die('连接失败:' . $e->getMessage());
}验证连接与基础操作
连接成功后可立即测试简单查询或执行语句:
- 查数据用
$pdo->query("SELECT * FROM users"),返回 PDOStatement 对象,支持fetch()、fetchAll() - 增删改用
$pdo->exec("INSERT INTO ..."),返回影响行数(失败时抛异常) - 防注入务必用预处理:
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?"); $stmt->execute([1]);
对象本身无需手动关闭,脚本结束时自动释放;若需显式断开,设 $pdo = null 即可。



















