MySQL事务不会因错误而停止

时间:2017-02-15 15:33:50

标签: php mysql transactions

我正在学习使用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中捕获错误?

1 个答案:

答案 0 :(得分:1)

您错过了rollback

  

这些陈述提供对交易使用的控制:

     

START TRANSACTION或BEGIN开始新交易。

     

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

     

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

     

SET autocommit禁用或启用默认的自动提交模式   本届会议。