我正在学习使用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 :(得分:1)
您错过了rollback:
这些陈述提供对交易使用的控制:
START TRANSACTION或BEGIN开始新交易。
COMMIT提交当前事务,使其更改成为永久更改。
ROLLBACK回滚当前事务,取消其更改。
SET autocommit禁用或启用默认的自动提交模式 本届会议。