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

gis*_*d22 10 php mysql innodb transactions

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

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

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

Max*_*sky 5

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

如果已禁用自动提交的会话在没有显式提交最终事务的情况下结束,则MySQL将回滚该事务.

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