0
트랜잭션을 수행하기 위해 이전 스타일의 mysql_query()
함수를 사용하고 있습니다. 트랜잭션의 쿼리 중 하나가 실패하더라도 롤백되지 않습니다. 영향을받는 행을 디버깅했으며 0 또는 1입니다. 구문 뒤에 :PHP + MySQL - 트랜잭션이 롤백되지 않습니다.
$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);
어떤 DB 엔진을 사용하고 있습니까? MyISAM이 트랜잭션을 지원하지 않는다면 – Anigel
mysql_affected_rows' => 성공시 영향을받는 행의 수를 반환하고 마지막 쿼리가 실패하면 -1을 반환합니다. – bitWorking
트랜잭션을 두 번 시작할 필요가 없습니다.) –