【发布时间】:2016-05-02 03:34:43
【问题描述】:
我正在使用 phpBB,但此代码未按预期工作。它只是使用 phpBB sql_transaction 函数启动一个 sql 事务,然后提交它。但是应该在中途抛出异常并使用相同的函数发出回滚。
但是,回滚永远不会发生。查询 1 和 2 生效,我无法让它们回滚。
documentation表示如果出现sql错误,它会自动发出回滚,但是如果出现php错误,例如超时什么的,我正在尝试回滚。
我正在使用 MySQL 5.7、phpBB 3.0.11 和 php 5.6。
有人能指出问题吗?
$db->sql_transaction('begin');
try {
$sql = 'UPDATE aaa_temp SET method = "a" WHERE id = 1';
$db->sql_query($sql);
$sql = 'UPDATE aaa_temp SET method = "b" WHERE id = 2';
$db->sql_query($sql);
throw new Exception('OMG TOTAL ERROR');
$sql = 'UPDATE aaa_temp SET method = "c" WHERE id = 3';
$db->sql_query($sql);
} catch (Exception $ex) {
$db->sql_transaction('rollback');
trigger_error($ex->getMessage(), E_USER_ERROR);
}
$db->sql_transaction('commit');
提前致谢!我知道这一定是非常简单和愚蠢的事情,但如果需要更多细节,请告诉我。
编辑:很清楚,我说的是 MySQL 中的 SQL 事务。
【问题讨论】:
-
你问为什么
throw new Exception之前的两个UPDATE查询正在执行? -
我知道它们正在被执行,但它们应该是交易的一部分。当抛出异常并发出回滚时,为什么它们会成功?这两个更新不应该回滚吗?
标签: php mysql transactions phpbb sqltransaction