MySQL事务不会停止在错误
问题描述:
我正在学习使用与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中捕获错误?
答
你缺少rollback:
这些语句可以使用交易的控制:
START TRANSACTION或BEGIN开始一个新的事务。
COMMIT提交当前事务,使其更改永久。
ROLLBACK回滚当前事务,取消其更改。
SET autocommit将禁用或启用 当前会话的默认自动提交模式。
“我认为交易不会允许任何查询发生,除非它们全部正确发生。”没有“正确”这个词你是对的。 – Johan