PDOコードがCall to a member function execute()
のようなエラーを生成することがあります または類似。または、エラーがなくても、クエリがすべて同じように機能するわけではありません。これは、クエリの実行に失敗したことを意味します。
クエリが失敗するたびに、MySQLには理由を説明するというエラーメッセージが表示されます。 。残念ながら、デフォルトでは、このようなエラーはPHPに転送されず、上記の無音または不可解なエラーメッセージしかありません。したがって、MySQLエラーを報告するようにPHPとPDOを構成することが非常に重要です。エラーメッセージが表示されたら、問題を修正するのは簡単です。
問題の詳細情報を取得するには、接続直後にコードに次の行を入力します
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
(ここで$dbh
はPDOインスタンス変数の名前です)または-より良い-このパラメータを接続オプション> 。その後、すべてのデータベースエラーはPDO例外に変換され、そのままにしておくと、通常のPHPエラーと同じように機能します。
特定のエラーが発生した場合に例外がスローされない可能性はごくわずかです。 query()
の場合 / prepare()
またはexecute()
呼び出しはfalse
を返します ただし、例外はありません。PDO::errorInfo()
を確認してください。 このように、
trigger_error("PDO errorInfo: ".$dbh->errorInfo());
エラーメッセージを受け取ったら、それを読んで理解する必要があります。当たり前のように聞こえますが、学習者は意味を見落としがちです。 エラーメッセージの。しかし、ほとんどの場合、問題は非常に簡単に説明されます。
- たとえば、特定のテーブルが存在しないと表示されている場合は、スペル、タイプミス、大文字小文字をチェックする必要があります。また、PHPスクリプトが正しいデータベースに接続していることを確認する必要があります
- または、SQL構文にエラーがあると表示されている場合は、SQLを調べる必要があります。そして、問題のある場所は直前です。 エラーメッセージで引用されたクエリ部分。
信頼も必要です エラーメッセージ。トークンの数がバインドされた変数の数と一致しないと表示されている場合は、です。 それで。存在しないテーブルまたは列についても同じことが言えます。それがあなた自身の間違いであろうとエラーメッセージが間違っていようと、選択を与えられて、常に前者に固執してください。繰り返しになりますが、このサイトの何百もの質問は、このアドバイスが非常に役立つことを証明しています。
PDOエラーを表示するには、一般的にPHPエラーを表示できる必要があることに注意してください。そのためには、サイト環境に応じてPHPを構成する必要があります。
-
開発 サーバー画面上にエラーが表示されると非常に便利です。そのためには、エラーの表示をオンにする必要があります。
error_reporting(E_ALL); ini_set('display_errors',1);
-
ライブにいる間 サイトでは、すべてのエラーをログに記録する必要がありますが、表示しないでください クライアントに。このために、次のようにPHPを構成します。
error_reporting(E_ALL); ini_set('display_errors', 0); ini_set('log_errors', 1);
error_reporting
に注意してください E_ALL
に設定する必要があります いつも。
また、一般的な妄想にもかかわらず、エラー報告にtry-catchを使用する必要はありません。 。 PHPは、PDOエラーをすでに、より良い形式で報告します。キャッチされない例外は開発に非常に適していますが、カスタマイズされたエラーページを表示する場合は、try catchを使用せずに、カスタムエラーハンドラー 。一言で言えば、PDOエラーを特別なものとして扱う必要はありませんが、コード内の他のエラーと見なす必要があります。
追記
エラーが発生しないこともありますが、結果も発生しません。つまり、基準に一致するデータがないということです。 。したがって、データを誓うことができ、基準が適切であっても、この事実を認める必要があります。ではない。もう一度確認する必要があります。一致する問題を特定するのに役立つ短い回答があります。