【发布时间】:2012-08-19 11:45:59
【问题描述】:
我正在使用 PHP 的 mysqli 库。数据库插入和更新总是在一个 try-catch 块中。立即检查每个查询是否成功(if $result === false),任何失败都会引发异常。 catch 调用 mysqli_rollback() 并退出并为用户发送一条消息。
我的问题是,我应该检查mysqli_rollback() 的返回值吗?如果是这样,并且回滚失败,代码应该采取什么行动?
我很难理解回滚是如何失败的(除非 MySQL 中有一些严重的错误)。而且由于 PHP 无论如何都会退出,调用回滚几乎是多余的。我当然认为它应该在代码中清楚起见,但是当 PHP 退出时,它会关闭与 MySQL 的连接,并且未提交的事务会自动回滚。
【问题讨论】:
-
如果您正在寻找具有现实概率的具体示例-您的 php 可能在与数据库运行的机器不同的机器上执行(例如,单独的数据库服务器)。网络 io 有很多“现在可以工作,但下一秒就不能工作”的场景。当然,这也可能发生在同一台机器上,只是可能性要小得多。
-
有趣!不过,在这种情况下,含义似乎是相同的:即使回滚调用失败,PHP 的 MySQL 客户端会话也会结束并发生回滚。因此,也许值得将错误记录为更大问题的指标,但您仍然不必担心数据完整性。
标签: php mysql transactions innodb