我在一个脚本中有一些查询,我想要么全部执行,要么不执行。我已经查过了,我想我得用交易。
实际上,我想使用PDO::开始交易。现在有两种方法。
所以他们之间有什么区别?在我看来,两者都是一样的,那么我什么时候应该使用哪一个呢?
<?php
$dbh->beginTransaction();
$sth1 = $dbh->exec("DROP TABLE fruit");
$sth2 = $dbh->exec("UPDATE dessert SET name = 'hamburger'");
$sth3 = $dbh->exec("INSERT INTO names(id, name) VALUES (NULL, 'peter')");
// which one?
$dbh->commit();
// or
$dbh->rollBack();
// ??
/* Database connection is now back in autocommit mode */
?>发布于 2016-06-04 17:48:25
他们俩在我看来都是一样的
这是错误的。根据定义,事务本质上是Atomic,意味着它将发生并成功执行组中的所有命令,或者根本不执行。如果它成功,并且您希望持久化更改,那么如果组中的任何语句失败,则COMMIT else,然后ROLLBACK返回到原始状态。
因此,在您的示例中,您可能希望成功地执行以下所有语句,如果这样做,那么COMMIT将持久化更改,但是如果任何语句由于任何所谓的原因而失败,那么它最终可能会给出一个不想要的结果,您不想持久化,所以ROLLBACK会返回到以前的一致状态。
$sth1 = $dbh->exec("DROP TABLE fruit");
$sth2 = $dbh->exec("UPDATE dessert SET name = 'hamburger'");
$sth3 = $dbh->exec("INSERT INTO names(id, name) VALUES (NULL, 'peter')");阅读关于事务的文章,也可以看到另一篇文章PHP + MySQL事务示例
发布于 2016-06-04 17:46:57
您使用commit来执行事务,而rollback正好相反,当您希望保持所有事务不变时(例如,如果您在事务的某个步骤中检测到了一些错误),则使用回滚。
https://stackoverflow.com/questions/37633210
复制相似问题