2010-07-25 746 views
2

我想设置一个MySQL事务,以便我可以循环查看一堆查询(请参阅下文),如果其中任何一个失败,则会回滚所有更改。然而,我发现如果失败了,并不是所有的查询都会回滚。我在这里做错了什么?使用PHP中的循环MySQL事务时遇到麻烦

mysql_query("START TRANSACTION"); 

    foreach($array1 as $arr){ 

      // loop SQL query 

      if(mysql_error()){ 
       $failed = "..."; 
      } 
    } 


    foreach($array2 as $arr){ 

      // loop SQL query 

      if(mysql_error()){ 
       $failed = "..."; 
      } 
    } 

    if(isset($failed)){ 
      mysql_query("ROLLBACK"); 
    } else { 
      mysql_query("COMMIT"); 
    } 

谢谢!

回答

3

原因是,如果查询失败(由于错误),事务会自动回滚并终止。因此,如果查询失败,则应该停止循环,因为在失败的查询后执行的任何内容都会自动提交(或者至少在另一个交易中,如果AUTOCOMMIT已关闭)...

1

您使用的是事务安全表类型吗?默认的MyISAM不支持事务,我推荐使用InnoDB。