2026-06-10 01:30:13
PDO(PHP Data Objects)是PHP中用于数据库操作的抽象层,提供统一接口支持多种数据库(如MySQL、PostgreSQL等),并通过预处理和事务机制提升安全性与数据一致性。以下是PDO的核心用法详解:
1. 连接数据库创建PDO实例时需指定数据源名称(DSN)、用户名和密码,并设置异常模式以便调试。
try { $dsn = 'mysql:host=localhost;dbname=testdb;charset=utf8'; $username = 'root'; $password = '123456'; $pdo = new PDO($dsn, $username, $password); // 设置错误模式为异常 $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);} catch (PDOException $e) { die("连接失败:" . $e->getMessage());}问号占位符:$stmt = $pdo->prepare("SELECT * FROM users WHERE age > ?");$stmt->execute([25]);$results = $stmt->fetchAll(PDO::FETCH_ASSOC);foreach ($results as $row) { print_r($row);}
命名占位符:$stmt = $pdo->prepare("SELECT * FROM users WHERE city = :city");$stmt->execute([':city' => '北京']);
使用prepare() + execute()组合更安全,避免直接拼接SQL。
PDO通过事务确保多个SQL操作的原子性,失败时回滚以保持数据一致性。
try { $pdo->beginTransaction(); // 开启事务 $pdo->exec("UPDATE account SET balance = balance - 100 WHERE user_id = 1"); $pdo->exec("UPDATE account SET balance = balance + 100 WHERE user_id = 2"); $pdo->commit(); // 提交事务 echo "转账成功";} catch (Exception $e) { $pdo->rollBack(); // 回滚事务 echo "操作失败:" . $e->getMessage();}事务默认自动提交,需显式调用beginTransaction()关闭。
出错时必须执行rollBack()撤销未提交的操作。
new PDO():创建数据库连接。
setAttribute():设置PDO属性(如错误模式)。
query():执行简单查询,返回结果集。
prepare():预处理SQL语句,返回PDOStatement对象。
execute():绑定参数并执行预处理语句。
fetch()/fetchAll():获取单行或全部结果,支持PDO::FETCH_ASSOC等格式。
beginTransaction():开启事务。
commit():提交事务。
rollBack():回滚事务。
lastInsertId():获取最后插入的ID。
rowCount():返回受影响的行数。
统一接口:支持多种数据库,代码可移植性强。
安全性:预处理语句有效防止SQL注入。
事务控制:确保复杂操作的原子性。
始终设置异常模式(PDO::ERRMODE_EXCEPTION)以便调试。
增删改操作优先使用预处理语句。
事务操作需显式处理回滚逻辑。
掌握PDO的连接、预处理、执行和事务处理,可高效完成各类数据库任务,是现代PHP开发的推荐方式。