3

時々、PDOで次のようなエラーが発生します。

エラー!:SQLSTATE [HY093]:無効なパラメーター番号:パラメーターが定義されていません

あいまいなメッセージの代わりに、行番号、ファイル名、欠落しているパラメーターなど、より具体的なエラーを取得する方法はありますか?

4

2 に答える 2

5

まず、エラー時に例外をスローするように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を使用する場合は、エミュレートされたプリペアドステートメントを必ず無効にしてください。これを行う方法とその理由の詳細については、こちらをご覧ください。

于 2012-09-19T22:29:47.387 に答える
1

できることは、グローバルエラーハンドラーとグローバル例外ハンドラーを登録することです。これらの関数は、ファイル名、行番号、およびエラーメッセージを受け取ります。これらの関数では、データを画面にエコーして終了します。

于 2012-09-19T22:09:47.083 に答える