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

时间:2013-01-30 16:58:04

标签: php mysql transactions

实际的列名是account和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。

2 个答案:

答案 0 :(得分:1)

你开启了例外吗?默认情况下,pdo不会抛出它们,而是默默地忽略错误。

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

答案 1 :(得分:0)

$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();