2011-12-29 17 views
0

私はPDOを使ってmysqlデータベースに接続しています。 $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);PDO try-catchと例外属性

今私は別の中で私の接続情報(ユーザー名、パス、など)、および上記の行を持っている:私はそうのようなエラー属性を設定する場合、私は私がトライcatchブロックを使用する必要がありどこへと困惑しています私のメインファイルに含めるファイル。これら(接続情報と上記の行)は、try-catchブロックに格納されます。

私のメインファイルには、このファイルが含まれています。メインファイルにtry-catchブロックが必要ですか(pdo関連のものの周り)? (彼らは私がクエリを作成して実行する場所です)。

+0

[意味のあるユーザー名]を選択することを検討してください(http://tinyurl.com/so-hints)。これの利点の1つは、他の人が[返答時](http://meta.stackexchange.com/questions/43019/how-do-comment-replies-work)を使用することができ、誰かがあなたに対処したという通知を受けるでしょうコメントで。 – outis

答えて

1

例外を除いて、処理されていないときや、処理するのが理にかなっているときは、いつでも処理する必要があります。スローする可能性のある方法ごとに、どこで適切に処理されるかを自分に尋ねます。例外をスローする可能性のあるPDO関数が呼び出されたときに例外をキャッチするのは理にかなっていません。 (たとえば、新しいPDOオブジェクトが作成された時点でPDOExceptionを処理するのは意味がありません。後続のコードは有効なPDOオブジェクトの存在に依存しますが、その代わりに、例外からの回復を試みるか、正常に失敗するか)。これが例外の理由です。エラーを処理するための十分な情報がない場合は、より低いレベルでエラーが検出される可能性があります。したがって、コードはエラーを処理できるより高いところに例外をスローします。

よく設計されたプロジェクトでは、データストアへのアクセスはモジュール内に隔離されているため、残りのコードのほとんどはデータストアの正確な性質に影響を受けません。この分離(マルチティアまたはMVCなど)を持つアーキテクチャでは、データ・アクセスの例外はデータ・アクセス・レイヤーで処理されますが、「処理」は異なるタイプの例外を投げることを意味します。

それはおよそexception handling strategies考えるのに役立ちます:

  • は、プロセスとの継続的な操作を再開することにより、リトライ
  • 再び何かを固定し、失敗した操作を試みることによって、リトライ

    • 以降で操作を再試行してください
    • 上位レベルに例外をスローする(同じ例外である可能性があります)
    • リトライするユーザーにエラーメッセージを表示して、何かを修正し、失敗した操作を再試行します。
    • エラーメッセージをユーザーに表示して終了します(HTML出力時にはdon't use or dieのみ)。無効なHTMLは正常ではありません)。

    も参照してください。「Exception-handling antipatterns」。

    エラーモードをPDO::ERRMODE_EXCEPTIONに設定すると例外がキャッチされるかどうかを尋ねる場合は、いいえ。実際には正反対です。 catchブロックだけが例外を処理できます。

    +0

    PDOのsetAttribute関数を使用すると、try-catchブロックが冗長かどうか混乱しています。 – user1114

    +0

    答えが問題を解決していないようであれば、質問を編集して明確にしてください。 SOはQ&Aサイトであり、フォーラムではありません。 [よく書かれた質問](http://sscce.org/)に掲載されています。コメントは議論のためのものではありません。彼らは、明確化、短い注釈などの要求のようなものです。 – outis

    関連する問題