📜  pdo 事务 - PHP (1)

📅  最后修改于: 2023-12-03 15:33:26.517000             🧑  作者: Mango

PDO 事务 - PHP

在 PHP 中,当需要执行多个数据库操作时,有时候我们需要把这些操作打包成一个事务,也就是只有当这些操作都成功完成时,才将它们应用到数据库,否则就回滚这些操作,以保证数据的一致性。PDO 事务是一种使用 PDO 操作数据库时经常用到的技术。

PDO 事务的基本概念

数据库事务是指一组数据库操作,它们具有以下四个特性:

  1. 原子性(Atomicity):一个事务中的所有操作要么全部成功,要么全部失败回滚。
  2. 一致性(Consistency):事务执行前后,数据必须保持一致状态。
  3. 隔离性(Isolation):事务执行过程中,其它事务的执行应该被隔离。
  4. 持久性(Durability):事务成功执行后,数据的修改应该被持久化到数据库。

PDO 事务满足以上四个特性,保证了对数据库的操作的正确性和完整性,避免了数据损坏等问题。

使用 PDO 事务

使用 PDO 事务十分简单,只需要使用 PDO 对象调用 beginTransaction 方法开启一个事务,使用 commit 方法提交这个事务,使用 rollBack 方法回滚这个事务即可。

在以下示例中,我们将演示如何使用 PDO 事务插入两条数据到一个数据库表中。如果两条数据都插入成功,我们使用 commit 方法将事务提交到数据库;如果其中一条数据插入失败,我们则使用 rollBack 方法将事务回滚,从而保证数据的一致性。

<?php
try {
    // 建立数据库连接
    $pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
    // 开始事务
    $pdo->beginTransaction();
    
    // 第一条 SQL 语句
    $sql1 = 'INSERT INTO `user` (`name`, `age`) VALUES (?, ?)';
    $stmt1 = $pdo->prepare($sql1);
    $stmt1->bindParam(1, $name1);
    $stmt1->bindParam(2, $age1);
    $name1 = 'Jack';
    $age1 = 30;
    $stmt1->execute();
    
    // 第二条 SQL 语句
    $sql2 = 'INSERT INTO `user` (`name`, `age`) VALUES (?, ?)';
    $stmt2 = $pdo->prepare($sql2);
    $stmt2->bindParam(1, $name2);
    $stmt2->bindParam(2, $age2);
    $name2 = 'Tom';
    $age2 = 25;
    $stmt2->execute();
    
    // 提交事务
    $pdo->commit();
    echo '两条数据都插入成功';
} catch (PDOException $e) {
    // 回滚事务
    $pdo->rollBack();
    echo '插入数据失败:' . $e->getMessage();
}
?>

在上面的代码中,我们使用 PDO 对象调用 beginTransaction 方法开启一个事务,并将两条 SQL 语句插入到数据库表中。如果插入成功,我们使用 commit 方法提交这个事务,否则使用 rollBack 方法回滚这个事务。

总结

使用 PDO 事务可以保证数据库操作的正确性和完整性,避免了数据损坏及其它问题。学会了 PDO 事务的使用后,我们可以更加灵活地处理数据库操作。