首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >事务: commit()与rollBack()

事务: commit()与rollBack()
EN

Stack Overflow用户
提问于 2016-06-04 17:40:29
回答 2查看 537关注 0票数 0

我在一个脚本中有一些查询,我想要么全部执行,要么不执行。我已经查过了,我想我得用交易。

实际上,我想使用PDO::开始交易。现在有两种方法。

  • 回滚()函数
  • 承诺()函数

所以他们之间有什么区别?在我看来,两者都是一样的,那么我什么时候应该使用哪一个呢?

代码语言:javascript
复制
<?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 */
?>
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-04 17:48:25

他们俩在我看来都是一样的

这是错误的。根据定义,事务本质上是Atomic,意味着它将发生并成功执行组中的所有命令,或者根本不执行。如果它成功,并且您希望持久化更改,那么如果组中的任何语句失败,则COMMIT else,然后ROLLBACK返回到原始状态。

因此,在您的示例中,您可能希望成功地执行以下所有语句,如果这样做,那么COMMIT将持久化更改,但是如果任何语句由于任何所谓的原因而失败,那么它最终可能会给出一个不想要的结果,您不想持久化,所以ROLLBACK会返回到以前的一致状态。

代码语言:javascript
复制
$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事务示例

票数 0
EN

Stack Overflow用户

发布于 2016-06-04 17:46:57

您使用commit来执行事务,而rollback正好相反,当您希望保持所有事务不变时(例如,如果您在事务的某个步骤中检测到了一些错误),则使用回滚。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37633210

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档