10

我正在使用 PHP 的 mysqli 库。数据库插入和更新总是在一个 try-catch 块中。立即检查每个查询是否成功(if $result === false),任何失败都会引发异常。catch 调用mysqli_rollback()并退出,并为用户发送一条消息。

我的问题是,我应该费心检查 的返回值mysqli_rollback()吗?如果是这样,并且回滚失败,代码应该采取什么行动?

我很难理解回滚是如何失败的(除非 MySQL 中有一些严重的错误)。而且由于 PHP 无论如何都会退出,调用回滚几乎是多余的。为了清楚起见,我当然认为它应该在代码中,但是当 PHP 退出时,它将关闭与 MySQL 的连接,并且未提交的事务会自动回滚。

4

2 回答 2

5

如果回滚失败(例如连接失败),无论如何都会在连接关闭后回滚更改,因此您不需要处理错误。当您在事务中时,除非您有显式提交(或者您在自动提交模式下运行,这意味着您在每个语句之后都有提交),否则事务正在回滚。

如果禁用了自动提交的会话在没有明确提交最终事务的情况下结束,MySQL 会回滚该事务。

您想要处理回滚错误的唯一情况是您没有退出脚本,而是稍后启动新事务,因为启动事务将隐式提交当前事务。查看导致隐式提交的语句

于 2012-08-24T11:48:02.197 回答
0

mysqli_rollback如果您没有(从未)连接到数据库,则可能会失败。取决于您事先的错误处理。

于 2012-08-23T22:03:21.117 回答