時々、PDOで次のようなエラーが発生します。
エラー!:SQLSTATE [HY093]:無効なパラメーター番号:パラメーターが定義されていません
あいまいなメッセージの代わりに、行番号、ファイル名、欠落しているパラメーターなど、より具体的なエラーを取得する方法はありますか?
時々、PDOで次のようなエラーが発生します。
エラー!:SQLSTATE [HY093]:無効なパラメーター番号:パラメーターが定義されていません
あいまいなメッセージの代わりに、行番号、ファイル名、欠落しているパラメーターなど、より具体的なエラーを取得する方法はありますか?
まず、エラー時に例外をスローするようにPDOが設定されていることを確認します。
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
ここで、すべてのPDO操作/操作のセットが次のようにtry
/ブロックで囲まれていることを確認します。catch
try {
$stmt = $pdo->prepare("SELECT * FROM Whatever");
// ...yada yada yada, your PDO code goes here
} catch (PDOException $e) {
// This will echo the error message along with the file/line no on which the
// exception was thrown. You could e.g. log the string to a file instead.
echo $e->getMessage().' in '.$e->getFile().' on line '.$e->getLine();
}
すべての例外は基本クラスから拡張されるException
ため、そのメソッドとエラーに関する情報を継承します。
補足として、MySQLでPDOを使用する場合は、エミュレートされたプリペアドステートメントを必ず無効にしてください。これを行う方法とその理由の詳細については、こちらをご覧ください。
できることは、グローバルエラーハンドラーとグローバル例外ハンドラーを登録することです。これらの関数は、ファイル名、行番号、およびエラーメッセージを受け取ります。これらの関数では、データを画面にエコーして終了します。