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 に答える