PHP + MySQL - 事务不回滚

标签 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); 

最佳答案

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

您当前使用的MyISAM不支持事务。

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

MySQL 给出了如何从 MyISAM to INNODB 转换的说明

关于PHP + MySQL - 事务不回滚,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17876931/

相关文章:

php - 连接到 Azure MySQL 数据库

mysql - MySQL 触发器执行错误

mysql - 在mysql中执行find_in_set()

c# - SQL 服务器 : is there any performance penalty for wrapping a SELECT query in a transaction?

java - Sybase 中的 JDBC 事务控制

php - 拆分分隔文本并与另一个字段配对

php - 用于选择没有其子节点的节点的 Xpath

php - mySQL TIME 函数和时区

c# - 无法执行事务操作,因为有待处理的请求在工作

php - 使用面向对象的 PHP 从 MySQL 中提取设置