PHP + MySQL - 交易不回滚

时间:2013-07-26 08:48:40

标签: php mysql sqltransaction

我使用旧式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 个答案:

答案 0 :(得分:1)

您需要使用事务数据库引擎。例如INNODB

您目前正在使用不支持交易的MyISAM。

这意味着您无法在不更改数据库引擎的情况下启动或回滚事务。

MySQL提供了有关如何从MyISAM to INNODB

转换的说明