PHP + MySQL - транзакции не выполняются

Я использую старый стиль mysql_query() функции для выполнения транзакции. Он не откатывается, даже если один из запросов в транзакции не выполнен. Я отладил затронутые строки, и они либо 0 или 1. Синтаксис следовал:

 $cnx = mysql_connect( .. ); 
 mysql_select_db("DB", $cnx); 
 mysql_query("START TRANSACTION");
 mysql_query("BEGIN");

 $isrollback = -1; 

 for (...) // run through query list 
 {
    mysql_query(".... query_i ....");
    if(mysql_affected_rows() == 0) 
    {
          $isrollback = 1
    }

 }

 // more queries 
 if ($isrollback > 0) 
     mysql_query("ROLLBACK");
 else
     mysql_query("COMMIT); 

1 ответ

Решение

Вам нужно использовать транзакционную базу данных. например, INNODB

В настоящее время вы используете MyISAM, который не поддерживает транзакции.

Это означает, что вы не можете запускать или откатывать транзакции без изменения вашего механизма БД.

MySQL дает инструкции о том, как конвертировать из MyISAM в INNODB

Другие вопросы по тегам