2013-07-26 78 views
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); 
+2

您使用的是哪種數據庫引擎?如果它的MyISAM不支持事務 – Anigel

+2

'mysql_affected_rows' =>'成功返回受影響的行數,如果最後一次查詢失敗,則返回-1# – bitWorking

+1

您不需要啓動事務2次;) –

回答

1

你需要使用一個事務型數據庫引擎。例如INNODB

您目前正在使用不支持事務的MyISAM。

這意味着您無法在不更改數據庫引擎的情況下啓動或回滾事務。

MySQL給出瞭如何轉換的說明MyISAM to INNODB