2

我正在尝试设置一个 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");
     }

谢谢!

4

2 回答 2

3

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

于 2010-07-25T20:29:57.863 回答
1

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

于 2010-07-25T20:08:19.977 回答