0

提供されたデータに問題がある場合、SIGNAL で例外を発生させる MySQL テーブルの TRIGGER があります。PDO を使用して PHP でこの例外をキャッチするにはどうすればよいですか?

前もって感謝します。

アップデート

私の問題の詳細: トランザクション内で複数のクエリを実行していますが、SIGNAL があったためにそのうちの 1 つが失敗した場合、トランザクションをロールバックしたいと考えています。現在、シグナルはアクティブ化されていますが、他のすべてのクエリは実行されています。

別の更新

これまでのところ、私は持っています:

try {
  $db->beginTransaction();

  if (!$db->query('UPDATE accounts SET amount = amount - 10 WHERE id = 1')) {
    throw new Exception($db->errorInfo()[2]);
  }

  if (!$db->query('UPDATE accounts SET amount = amount + 10 WHERE id = 2')) {
    throw new Exception($db->errorInfo()[2]);
  }

  $db->commit();
} catch (Exception $e) {
  $db->rollback();
  echo 'There was an error: ' . $e->getMessage();
}

これは、例外を処理してトランザクションを行う適切な方法ですか? 私の質問が広すぎる場合は申し訳ありません。

4

2 に答える 2

0

次のようなものを試してください:

$ls_error = "";
$mysqli->autocommit(FALSE);
// first sql
if (!$mysqli->query($sql)) {
    $ls_error .= sprintf("Error: %d: %s\n",$mysqli->errno,  $mysqli->error);
    $mysqli->rollback();
}
// second one
if ($ls_error == "") {
    if (!$mysqli->query($sql)) {
        $ls_error .= sprintf("Error: %d: %s\n",$mysqli->errno,  $mysqli->error);
        $mysqli->rollback();
    }
}

// third one
if ($ls_error == "") {
    if (!$mysqli->query($sql)) {
        $ls_error .= sprintf("Error: %d: %s\n",$mysqli->errno,  $mysqli->error);
        $mysqli->rollback();
    }
}
if ($ls_error == "") {
    $mysqli->commit();
} else {
    echo $ls_error;
}
于 2012-05-18T12:07:11.427 に答える