2012-03-10 7 views
1

mysqli呼び出しのすべてのエラーを1つのステートメントで1か所でキャッチすることはできますか、エラーごとに個別にmysqli呼び出しをチェックする必要がありますか? mysqliのエラーが発生した場合、どこにでも PHPとmysqliを使用すると、すべてのPHPスクリプトのすべてのmysqliエラーを1か所でキャッチできますか?

if(mysqli_error_occurs_anywhere_in_web_app) { 
    die('<html><head></head><body>database error</body></html>'); 
}

は基本的に私はしたい出力するHTMLのデータベース・エラー・ドキュメント:

は、私はの線に沿って何かをしたいです。これは可能ですか?

答えて

2

mysqli_queryを直接どこでも呼び出すのではなく、独自のクエリ関数ですべてのクエリを代わりにラップすることもできます。たとえば、あなた自身のDBオブジェクトです。このように、DB実装を切り替える必要がある場合は、mysqli_queryの呼び出しを直接検索/置換するのではなく、わずかに異なるクエリ関数の実装で新しいDBオブジェクトに切り替えるだけです。また、エラーハンドリングを非常に簡単に、集中化できるというメリットもあります。

1

あなた自身に尋ねる必要があることは、同じ方法ですべてのデータベースエラーを処理するかどうかということです。 dbに接続できない場合は、重大なエラーで、dbサーバーがダウンしている可能性があります。そのような場合には、緊急のアラートを送信することが必要な場合があります(DBを別の方法で監視していない場合)。 SQL構文エラーのためにクエリが失敗した場合は、おそらく入力データをエスケープしていないか、どこかのコードにバグがあります。この場合、できるだけ多くの情報をログに記録して、後で問題をデバッグ/ソートすることができます。

それでは、最初に必要となるのは、mysqli関数をラップして、さまざまなエラーをトラップして、必要な方法を処理できるようにすることです(独自のDBクラスを作成するか、独自の関数) - PHPドキュメントでは、これをどのようにして開始するかに関する例を示します(mysqli docs)。または、AFAIAAがより有用なエラー処理(例外と戻り値の混在)を持つPDOを調べることもできます。

これを処理するには、コード内に1つのポイントが必要です。フロントコントローラのようなものがあれば、そこに置くことができるかもしれません。または、独自のカスタム例外ハンドラを作成して、必要なものを実現することができます(set_exception_handler)。

最も簡単で最悪の解決方法は、すべてのエラーをキャッチして解析するカスタムエラーハンドラを作成し、それに応じて行動することです(適切な情報を記録したDBエラーページにリダイレクトする可能性があります)。しかし、私はこれが最も汚れた解決策だと言ったのですか?

関連する問題