如何回滚对PHP中存在Try Catch语句的数据库所做的更改


How to rollback changes made to a database with presence of Try Catch Statement in PHP?

我几乎在用PHP和MySQL构建的站点上的每一个插入或更新语句中都使用了try catch语句。如果出现以下情况:

try {
    //do insert or update
}
catch (PDOException $e) {
   $db->rollback();
   //do something with error $e
}

在本例中,如果发生错误,对DB所做的任何操作都将回滚(更改反转),并且一切正常。然而,我不确定如何处理在一个try/catch中存在多个插入或更新语句的情况-如何在一个页面上甚至多个try/catch。

最终我试图解决:如果在脚本中发现错误,不允许单个插入/更新(try/catch)语句完成,回滚对该特定脚本中的所有表所做的更改。

是否有可靠的方法来做到这一点?

您不必在每个事务中只有一个操作。可以有多个

例如:

当你去银行的自动取款机:你登录,取现金。注销。重新登录。存点钱。注销。(在. .)
您是否登录。取现金,存存款。(然后……)注销。div ?

回滚更改的最简单方法是确保以下三件事:

  • 使用START TRANSACTION/COMMITSTART TRANSACTION/ROLLBACK
  • 事务中使用的所有表都使用InnoDB存储引擎
  • 在你想回滚一些insert/UPDATEs而不是全部的情况下使用检查点
<标题>警告h1> 确保不要在事务中发出以下任何命令,因为它们会启动隐式COMMIT并开始一个新事务:
  • ALTER TABLE
  • BEGIN
  • CREATE INDEX
  • DROP DATABASE
  • DROP INDEX
  • DROP TABLE
  • RENAME TABLE
  • TRUNCATE TABLE
  • LOCK TABLES
  • UNLOCK TABLES
  • SET AUTOCOMMIT = 1
  • START TRANSACTION

"简单"的方法是使用ADOdb的PHP与InnoDB表和"mysql "数据库类型。DBAL负责跟踪事务期间所做的所有更改,并在需要时为您回滚这些更改。

相关文章: