0

実際の列名はaccountとpasswdであるため、2番目のクエリは失敗しますが、最初のクエリは引き続きデータベースに挿入されます。

$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です。

4

2 に答える 2

1

例外をオンにしましたか?デフォルトでは、pdoはそれらをスローせず、エラーを黙って無視します。

$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
于 2013-01-30T17:00:29.327 に答える
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());
}

$mysqlrefenceは間違っています、あなたは使用しなければなりません、$db->rollback();

于 2013-01-30T17:00:05.143 に答える