php数据如何使用PDO扩展进行数据库操作_php数据抽象层PDO的用法详解

大哥大姐们在线教下,php数据如何使用PDO扩展进行数据库操作_php数据抽象层PDO的用法详解
最新回答
你可真迷人

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());}
  • DSN格式:数据库类型:host=主机名;dbname=数据库名;charset=字符集。
  • 异常模式:PDO::ERRMODE_EXCEPTION可在出错时抛出异常,便于定位问题。
2. 执行查询操作(SELECT)
  • 简单查询:使用query()方法直接执行SQL,返回结果集。$sql = "SELECT * FROM users";$stmt = $pdo->query($sql);while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { echo $row['name'] . ' - ' . $row['email'] . "<br>";}
  • 预处理查询(推荐):通过占位符绑定参数,防止SQL注入。

    问号占位符:$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' => '北京']);

3. 执行增删改操作(INSERT/UPDATE/DELETE)

使用prepare() + execute()组合更安全,避免直接拼接SQL。

  • 插入数据:$stmt = $pdo->prepare("INSERT INTO users (name, email, age) VALUES (?, ?, ?)");$stmt->execute(['张三', 'zhangsan@example.com', 30]);echo "新增记录ID:" . $pdo->lastInsertId();
  • 更新数据:$stmt = $pdo->prepare("UPDATE users SET age = ? WHERE name = ?");$stmt->execute([35, '张三']);echo "影响行数:" . $stmt->rowCount();
  • 删除数据:$stmt = $pdo->prepare("DELETE FROM users WHERE id = ?");$stmt->execute([1]);echo "已删除 " . $stmt->rowCount() . " 条记录";
4. 错误处理与事务支持

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()撤销未提交的操作。

5. 关键方法与属性总结
  • 连接相关:

    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开发的推荐方式。