使用PHP和MySQL,您应该检查回滚失败吗?

时间:2012-08-23 21:45:44

标签: php mysql transactions innodb

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

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

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

2 个答案:

答案 0 :(得分:5)

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

  

如果已禁用自动提交的会话未明确结束   提交最终交易,MySQL回滚该交易。

您希望处理回滚错误的唯一情况是,如果您没有退出脚本,而是稍后启动新事务,因为启动事务将隐式提交当前事务。查看Statements That Cause an Implicit Commit

答案 1 :(得分:0)

如果您(从未)连接到数据库,

mysqli_rollback可能会失败。取决于您的错误处理。