SQL 查询失败,但事务回滚不起作用


SQL query fails but the transaction rollback doesn't work

实际的列名是帐户和passwd,因此第二个查询将失败,但第一个查询仍插入到数据库中。

$sql1 = "INSERT INTO users (account, passwd) VALUES ('account+1', 'password+1')";
$sql2 = "INSERT INTO users (account, password) VALUES ('account+2', 'password+2')";
try {
 $db->beginTransaction();
 $db->query($sql1);
 $db->query($sql2);
 $db->commit();
} catch (Exception $e) {
  $db->rollback();
  die($e->getMessage());
}

事务成功启动,没有错误,问题是它不会回滚,无论查询失败,始终插入行。

MySQL 版本 5.5.25,表类型为 InnoDB。

您是否打开了例外?默认情况下,pdo 不会抛出它们并静默忽略错误。

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql1 = "INSERT INTO user (account, passwd) VALUES ('account+1', 'password+1')";
$sql2 = "INSERT INTO users (account, password) VALUES ('account+2', 'password+2')";
try {
 $db->beginTransaction();
 $db->query($sql1);
 $db->query($sql2);
 $db->commit();
} catch (Exception $e) {
  $db->rollback();
  die($e->getMessage());
}

$mysql引用是错误的,你必须使用,$db->rollback();