web-dev-qa-db-ja.com

一部のPDOExceptionエラーがユーザーの画面の詳細に表示され、その他のエラーが表示されない理由

ユーザーから、画面に次のエラーが表示されるという報告がありました。 PDOException max_user_connections

このエラーのウォッチドッグエントリは次のようになります。

PDOException: SQLSTATE[HY000]: General error: 1205 Lock wait timeout exceeded; try restarting transaction: INSERT INTO (.............)

このようなエラーがユーザー画面に詳細に表示されないようにしてください。

ただし、画面にエラーを詳細に表示するというこの問題を再現することはできません。テスト中、SQLエラーは[〜#〜] [〜#〜]ではなく、詳細に表示されます。したがって、ソリューションを適用しても(settings.phpでdisplay_errorsをFALSEに設定するなど)、詳細を画面に表示するエラーの原因となるこの特定のシナリオを複製できないため、テストすることはできません。

テストの一環として、mymodule_node_viewのデータベースクエリで(テーブル名に)意図的な誤りを犯し、そのようなエラーがユーザー画面にどのように表示されるかをテストしました。問題は、どちらの場合も、display_errorsが「オン」または「オフ」になっているかどうかです(サイトステータスレポートで確認:http://example.com/admin/reports/status/php)、結果は同じです。ユーザー画面では、エラーは次のように表示されます。

enter image description here

詳細は表示されませんが、ウォッチドッグログでは同様にPDOExceptionでもあります。

PDOException: SQLSTATE[42S02]: Base table or view not found: 1146 Table 'mydb.nodeaa' doesn't exist: SELECT (..............)

だから、わかりません。 Drupal一部のPDOExceptionの詳細をユーザー画面に表示し、他のPDOExceptionの詳細を表示しないのはなぜですか?設定(たとえば、display_errorsを "off"に設定)が問題を解決するかどうかを効果的に確認する方法あらゆる種類のPDOException?

4
camcam

問題は、表示されるエラーが「ちょっと、データベースに接続できない!すでに多くのユーザーに!」という意味です。エラー表示を防ぐために使用している設定はデータベースにあります。ウォッチドッグのログはデータベースにあります。 Drupalはそれを示しています-設定していないことを知ることができないため、エラーが原因でそれを知ることができません。それが可能であっても、ユーザーの画面以外にログを記録することはできません

これを整理するには、次の2つが必要です。

4
Mołot