2

PHPを勉強していて質問があります。

次のコードを使用してデータベースに接続すると、Apache のエラー ログにエラーが表示される可能性はありますか?

    $con = new PDO('mysql:host='.$h.';dbname='.$dbn.';charset=utf8', $u, $p);
    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
    $con->setAttribute(PDO::ATTR_EMULATE_PREPARES,false);

それらがそこに表示される場合、try と catch を使用する理由は何ですか?

ありがとう。

4

1 に答える 1

3

それは素晴らしい質問です。
ほとんどの PHP ユーザーは例外を理解しておらず、例外がエラー報告と関係があると考えており、完全に誤用しています! 正しい答えはかなり単純ですが:

Apache のエラー ログにエラーが表示される可能性はありますか?

はい、エラーをログに記録するように PHP に指示した場合。log_errorsini 設定がこれを担当します。

それらがそこに表示される場合、try と catch を使用する理由は何ですか?

それは最も興味深い質問です。エラー メッセージ
処理するために、決して try catches を使用しないでください。 このメカニズムは、エラーを処理するためのものです。エラーメッセージではありません。本質的な違いがありますが、PHP 関係者のほとんどが誤解しています。

エラー メッセージを処理するには、PHP にエラーを記録するように指示するだけです。エラー自体
を処理する場合は、try catch が不可欠です。

エラー処理とは?
エラーログ以外にエラーが発生した場合に行う必要があること:

トランザクションをロールバックする

try {
    $dbh->beginTransaction();
    // some SQL stuff
} catch (Exception $e) {
    $dbh->rollback();
    throw $e;
}

エラーを処理した後に例外を再スローしていることに注意してください

重要でないコードブロックのエラーを致命的でないようにする

try {
    some_non_critical_function();
} catch (Exception $e) {
    log_error($e->getMessage().$e->getTrace());
}

ここではエラー メッセージを手動でログに記録する必要がありますが、残りのコードは実行します。

等々。

于 2013-06-28T04:33:00.283 に答える