对于PHP和MySQL,是否应该检查回滚失败


With PHP and MySQL, should you check for rollback failures?

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

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

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

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

如果禁用了自动提交的会话在未显式结束的情况下结束提交最后的事务,MySQL回滚该事务。

您希望处理回滚错误的唯一情况是,如果您不是从脚本中退出,而是稍后启动新事务,因为启动事务将隐式提交当前事务。检出导致隐式提交的语句

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