[mysql]交易记录︰ commit () vs rollBack()

标签: MySQL PHP
发布时间: 2017/4/9 23:04:25
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我在一个脚本有很多疑问,我想要执行所有的他们都不...!我找遍了,我想通了我不得不使用事务

其实我想使用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 */
?>

解决方法 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')");

阅读有关交易记录,也看看这另一篇文章PHP + MySQL 交易实例

官方微信
官方QQ群
31647020