2013-07-26 63 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