如果 PHP PDO 事务失败,我必须显式 rollback() 吗?

发布于 2024-08-16 09:11:49 字数 121 浏览 4 评论 0原文

我看过一个代码示例,其中有人

$dbh->rollback();

在发生 PDOException 时执行 a 操作。我以为数据库会在这种情况下自动回滚?

I've seen an code example where someone does a

$dbh->rollback();

when there occurs an PDOException. I thought the database will rollback automatically in such a case?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

伊面 2024-08-23 09:11:49

如果您不提交也不回滚打开的事务,并且它在脚本中的任何地方都没有提交,那么它就不会已提交 (如数据库引擎所见),并将在脚本结束时自动回滚。

尽管如此,我(嗯,几乎)总是显式地提交回滚我打开的事务,所以:

  • 不存在错误的风险(例如稍后在脚本中“错误地”提交)
  • 代码更容易阅读/理解:当人们看到$db->rollback()时,他知道我想要事务肯定会回滚,并且他不必思考“他真的想回滚吗?还是他忘记了什么?以及脚本后面的内容呢?

数据库引擎不会“看到” PDOException :它是由 PHP 在各种条件下抛出的 - 但数据库本身不会回滚任何内容:

  • 事务要么已提交
  • ,要么已回滚
  • ,要么未显式提交或回滚-back -- 这意味着它没有提交 -- 这意味着修改的内容没有“真正”修改

If you don't commit not rollback an opened transaction, and it's not commited anywhere later in your script, it won't be commited (as seen by the database engine), and will automatically rolled-back at the end of your script.

Still, I (well, almost) always commit or rollback explicitly the transactions I open, so :

  • There is not risk of an error (like commiting "by mistake" later in the script)
  • The code is more easy to read / understand : when one sees $db->rollback(), he knows I want the transaction rolled-back for sure, and he doesn't have to think "did he really want to rollback, or did he forget something ? and what about later in the script ?"

The DB engine doesn't "see" the PDOException : it is thrown by PHP under various conditions -- but the database doesn't rollback anything by itself :

  • either a transaction is commited
  • or it's rolled-back
  • or it's not explicitly commited nor rolled-back -- which means it's not commited -- which means what's been modified is not "really" modified
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文