【问题标题】:Transaction: commit() vs rollBack()事务:commit() 与 rollBack()
【发布时间】:2016-10-04 15:09:39
【问题描述】:

我在一个脚本中有一些查询,我想要么全部执行,要么都不执行 ..!我已经搜索过了,我发现我必须使用 transaction

其实我想用PDO::beginTransaction。现在有两种方法。

那么它们之间有什么区别呢?两个都跟我一模一样,那我什么时候用哪一个呢?

<?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 */
?>

【问题讨论】:

  • 想象 rollBack 是取消按钮,commit 是保存按钮

标签: php mysql pdo transactions


【解决方案1】:

他们两个和我一模一样

错了。根据定义,事务是Atomic,本质上意味着它会发生并成功执行组中的所有命令,或者根本不执行。如果它成功并且您想要保持更改然后COMMIT 否则如果组中的任何语句失败然后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')");

阅读Transaction 并查看另一篇帖子PHP + MySQL transactions examples

【讨论】:

  • 你是什么意思“如果它成功并且你想坚持改变”?我还是不知道有什么区别..
  • 好的,首先请告诉我是否应该在其中一个的脚本中同时使用它们?
  • @Shafizadeh,他们俩都执行事务...捕获错误,如果有任何错误则回滚,否则提交。尝试阅读交易基础知识以更好地理解。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 2017-05-19
    • 1970-01-01
    • 1970-01-01
    • 2019-02-28
    • 2011-10-25
    • 2016-09-18
    • 1970-01-01
    • 1970-01-01
    • 2015-04-29
    相关资源
    最近更新 更多