繁体   English   中英

在MySQL循环中使用MySQL事务麻烦

[英]Trouble using MySQL transactions with loops in 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");
     }

谢谢!

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM