在 php mysqli 和 PDO 中开始 mysql 交易的最佳方式

best way to start a mysql transaction in php mysqli and PDO

如何在 mysqli 和 PDO 中启动事务?我该如何提交?我见过两种方法:使用 autocommit(false) 和 begin_transaction 方法,但哪种方法最好?我头疼!自动提交(假)或 begin_transaction?

你的问题不是很清楚,我还在回答。开始和提交事务很简单。在 PDO 中,做这样的事情:

<?php
    $pdo = // connect to database with PDO
    $pdo->beginTransaction();

    // query database here

    $result = // query result
    if($result) {
        // if result is okay
        $pdo->commit();
    } else {
        $pdo->rollBack();
    }
?>

**解释:**

  1. 首先,您开始交易
  2. 接下来,您查询数据库
  3. 如果结果没问题,提交事务
  4. 如果结果不正确,回滚和查询将不会执行

参考:http://php.net/manual/en/pdo.transactions.php

关于Auto-commit: 在auto-commit模式下,每个查询都是一个完整的事务,即时执行。默认情况下,PDO auto-commits 每个查询。关闭 auto-commit 将需要您手动提交查询。一般情况下,你不应该关闭它。

当您需要执行一个重要的查询时,即 multi-part 最终结果相互依赖的查询,例如两个账户之间的金额转账(您需要从一个账户中扣除金额 table 并将其添加到另一个 table),只需开始交易即可。在您提交事务之前,PDO 不会执行任何查询。如果出现问题,一切都会回滚到之前的状态。

最后,关闭 auto-commit 和开始交易之间没有什么大的区别。通过开始事务,您可以简化任务,否则无论其性质如何,您都需要手动提交每个查询。

我希望它能回答你的问题。