要求に応じて、質問を再フォーマットします。
次のコードの場合:
$newPDO=new PDO($DSN,$USER,$PASS);
$newPDO->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
$SQL='SOME SQL STATEMENT MAYBE FAULTY';
try{
$Query=$newPDO->Prepare($SQL)
$Success=$Query->execute();
if(!$Success)
echo('A');
}
catch(PDOException $e)
{
echo('B');
}
質問は、「A」が印刷されているのを見ることは可能ですか? $SQL
選択や挿入などのタイプによって答えは異なりますか?
元の質問:
- まず、属性を PDO::ATTR_ERRMODE、PDO::ERRMODE_EXCEPTION に設定して、execute() が DB からのエラーに遭遇したときに例外をスローするようにします。次に、それが本当なら、スローされた例外が返された「false」と同じである限り、execute() の戻り値をチェックする必要さえないかもしれないことに気付きました。外から捕まえるしかない。何もキャッチされない場合、クエリは問題ありません。
しかし、マニュアルによると、デフォルトでは execute() は例外をスローしないため、これについてはわかりません。何かを挿入すると、PKの重複や一意の制約違反など、いくつかの操作を試しました。私のアサーションはサポートされています。PDO は例外をスローし、DB から詳細エラー メッセージを取得できます。しかし、これが普遍的な真実かどうかはわかりません. ERRMODE を最大に設定したときに、execute() から false を取得し、PDOEXCEPTION をスローしないことは可能ですか? *