エラー、PDOを使用するmysqlへの接続が多すぎると、私たちのdbユーザー名とパスワードがわかりましたか?

以前の時点では、SQL接続が多すぎるように見えましたが、探していた人のために次のように表示されました。

PHP Fatal error:  Uncaught exception 'PDOException' with message  'SQLSTATE[08004] [1040] Too many connections' in /dir/file.php:21
Stack trace:
#0 /dir/file.php(21): PDO->__construct('mysql:host=loca...', 'the user', 'password')

ご覧のとおり、ユーザー名とパスワードが表示されます。

私はdbに接続するPDO形式が新しく、人々は私の普通のmysql_connect形式が安全でないと私に言いました。しかし、デフォルトでは、mysql_connectの接続があまりにも多すぎると、ユーザー名とパスワードをスクリーンに決して印刷しません。

どのような災害。

エラーが発生した場合、PDOがこれをやめるのを止めるにはどうすればいいですか?

私は使用しています:

$dbh = new PDO('mysql:host=localhost;dbname=' . $db, $user, $pass);
3
私はこれが問題であり、PDOチームに提出する必要があることに同意します。エラーが発生した場合、資格情報を隠すために投票してください: bugs.php.net/bug.php ?id = 62184
追加された 著者 IMB,
Ok - そうするでしょう。奇妙に思えるかもしれませんが、投票する必要があっても - エラーメッセージのデフォルトの印刷ユーザー名とパスワードの資格証明にちょっとばかげています!!特に、明らかに、PDOについての私の理解は、データベースアクセスのより安全な方法を作ることです。スーパーフェイル。
追加された 著者 willdanceforfun,
あなたはこれを理解したことがありますか?
追加された 著者 hafichuk,

2 答え

PDOは何もしていません。

例外処理を行わないため、デフォルトのPHPエラーハンドラが呼び出され、関数の引数を含む呼び出しスタックが表示されるため、これが発生しています。

通常、コールスタックは非常に優れているので、エラーハンドラを動作させたい 必要があります。あなたはそれを正しく使う必要があります。

  • 例外をスローする可能性があるコードの周りの適切な場所に try / catch ブロックを配置します。 try / catch ブロックをコードのトップレベルに置いて、何も浸透しないようにしてください。

しかし、PDOの文書には、PDOの例外を正しく捕まえない大きなリスクが明白に(赤い警告ボックスに)記載されています。

アプリケーションがPDOコンストラクタからスローされた例外をキャッチしない場合、zendエンジンが行うデフォルトのアクションは、スクリプトを終了してバックトレースを表示することです。このバックトレースは、ユーザー名とパスワードを含む完全なデータベース接続の詳細を明らかにします。この例外を明示的に(catch文によって)キャッチするか、set_exception_handler()で暗黙的にキャッチするのはあなたの責任です。

http://www.php.net/manual/en/pdo.connections。 PHP

3
追加された
それは自分のよりスマートなバージョンには意味があります。今私は試して/キャッチされているものを作業することができれば。ポインタのおかげで!
追加された 著者 willdanceforfun,
それはまた意味があります:)
追加された 著者 willdanceforfun,
@cosmicbdog:あなたは間違いなくそれらを採用しているライブラリを使う前に例外について学ぶ必要があります!
追加された 著者 Lightness Races in Orbit,

php.iniを編集して設定する

display_errors = 0

php.iniにアクセスできない場合は、スクリプトの先頭に以下を追加する必要があります:

ini_set("display_errors", "0");

See http://php.net/manual/en/errorfunc.configuration.php and http://php.net/manual/en/function.error-reporting.php

これにより、すべてのエラーがブラウザに出力されなくなります。まだエラーをログに記録していることを確認してください(php.ini設定)。

P.S. PDOを投げ捨てないでください

2
追加された
感謝します!ありがとう。
追加された 著者 willdanceforfun,
btwそれはdisplay_errors = 0かdisplay_errors =オフですか?
追加された 著者 willdanceforfun,
いいえ、例外をキャッチします。
追加された 著者 Lightness Races in Orbit,
エラーを無効にすると、何が起こっているのかわかりません(ただし、プロダクションでは表示されません)
追加された 著者 Lightness Races in Orbit,
@ TomalakGeret'kal私は完全に同意しますが、予防措置としてブラウザへの出力を無効にしたいと考えています。
追加された 著者 hafichuk,
どちらも動作します - php.iniファイルの規約に従います
追加された 著者 hafichuk,