2017-02-15 51 views
1

我正在学习使用与MySQL交易,它似乎没有像它应该那样工作。MySQL事务不会停止在错误

我创建了一些测试代码:

$db->query('START TRANSACTION;'); 
$db->query('DELETE FROM test1 WHERE id=4'); 
$db->query('DELETE FROM ttest2 WHERE id=5'); 
$res = $db->commit(); 

其中 “ttest2” 是故意错误(表被拼错)。

对于正常的查询,$ res将为false,查询将失败。但是当我运行事务时,第一次删除发生,它忽略第二次,并且$ res仍然是真的。我认为事务不会允许任何查询发生,除非它们全部正确发生。为什么它返回true,并且如何在PHP中捕获错误?

+0

“我认为交易不会允许任何查询发生,除非它们全部正确发生。”没有“正确”这个词你是对的。 – Johan

回答

1

你缺少rollback

这些语句可以使用交易的控制:

START TRANSACTION或BEGIN开始一个新的事务。

COMMIT提交当前事务,使其更改永久。

ROLLBACK回滚当前事务,取消其更改。

SET autocommit将禁用或启用 当前会话的默认自动提交模式。