我正在使用PHP的mysqli库。数据库插入和更新始终位于try-catch块中。立即检查每个查询的成功(if $result === false
),任何失败都会引发异常。 catch调用mysqli_rollback()
并退出并为用户发送消息。
我的问题是,我是否应该费心检查mysqli_rollback()
的返回值?如果是这样,并且回滚失败,代码应采取什么操作?
我很难理解回滚如何失败(除非MySQL中存在一些残暴的错误)。而且由于PHP无论如何都会退出,所以调用回滚几乎是多余的。我当然认为它应该在代码中以便清晰,但是当PHP退出时它将关闭与MySQL的连接,并且未提交的事务将自动回滚。
答案 0 :(得分:5)
如果回滚失败(例如连接失败),则无论如何都会在连接关闭后回滚更改,因此您无需处理错误。当您处于事务中时,除非您有显式提交(或者您在自动提交模式下运行,这意味着您在每个语句之后都提交了),事务正在回滚。
如果已禁用自动提交的会话未明确结束 提交最终交易,MySQL回滚该交易。
您希望处理回滚错误的唯一情况是,如果您没有退出脚本,而是稍后启动新事务,因为启动事务将隐式提交当前事务。查看Statements That Cause an Implicit Commit
答案 1 :(得分:0)
mysqli_rollback
可能会失败。取决于您的错误处理。