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