我几乎在用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/COMMIT
或START TRANSACTION/ROLLBACK
- 事务中使用的所有表都使用InnoDB存储引擎
- 在你想回滚一些insert/UPDATEs而不是全部的情况下使用检查点
-
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负责跟踪事务期间所做的所有更改,并在需要时为您回滚这些更改。