Проблема с использованием транзакций MySQL с циклами в PHP - PullRequest
2 голосов
/ 25 июля 2010

Я пытаюсь настроить транзакцию 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");
     }

Спасибо!

Ответы [ 2 ]

3 голосов
/ 26 июля 2010

Причина в том, что в случае сбоя запроса (из-за ошибки) транзакция автоматически откатывается и завершается.Поэтому вам следует прекратить зацикливание, если запрос не выполнен, потому что все, что будет выполнено после неудачного запроса, будет автоматически зафиксировано (или, по крайней мере, будет в другой транзакции, если AUTOCOMMIT выключено) ...

1 голос
/ 26 июля 2010

Используете ли вы безопасный для транзакций тип таблицы?MyISAM по умолчанию не поддерживает транзакции, я рекомендую использовать InnoDB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...