2010-01-04 124 views
5

如果有人做了如果PHP PDO事务失败,我必须明确回滚()吗?

$dbh->rollback(); 

当出现PDOException我见过的代码示例。我认为在这种情况下数据库会自动回滚?

+0

我相信事务只会在数据库级别停止,然后到期,但'rollback()'保存一些db资源应该是一个好习惯。 – 2010-01-04 19:46:07

回答

9

如果你不commitrollback打开的事务,这不是commited脚本中任何以后,它不会是commited(数据库引擎可见),并会自动回滚在脚本的结尾。


不过,我(好吧,几乎)总是commitrollback明确的交易我打开,所以:

  • 没有错误的风险(如commiting“错误”以后脚本)
  • 的代码更易于阅读/理解:当一个人看到$db->rollback(),他知道我想要的交易回滚的肯定,而他没有想到“他才真正想要回滚,还是忘了什么?那么在剧本的后面呢?


数据库引擎不能‘看到’PDOException:它是由PHP各种条件下抛出 - 但数据库本身不会回滚任何东西:要么

  • 交易将提交
  • ,或者它回滚
  • ,或者它没有明确COMMITED也不回滚 - 这意味着它不是COMMITED - 这意味着什么被修改是不是“真的”修改
+1

是的,即使它自动回滚,只要脚本结束时让回滚发生就会非常糟糕。如果稍后有人更改了代码,则可能有错误。 – MindStalker 2010-01-04 20:06:42