2017-12-02 10 views
2

私はポストグレスでPHPのpdoを使用しています。私はコアPHP、mvc、クラス、オブジェクトを使用していません。私は、開発に新しいですので、私は、私の心の中でいくつかの疑問を持っている: -正しい方法でそれをやって、PHP pdoでキャッチしよう

  • 私はすべてのクエリ実行にトライキャッチを使用する必要があります。
  • そして、私は例外

  • 上で実行中のスクリプトを終了する必要があり、その後のtryキャッチを使用して、すべてのクエリのために1トライキャッチを使用する方法がある場合、私は実行するための一般的な機能を作る意味クエリ。

  • ajaxで例外を処理する方法。

これについて私の疑問を明確にしてください。

答えて

3

あまりにも多くの質問があり、あまりにも一般的です。しかし、ほとんどの場合:

  1. まさか
  2. それは、あなた次第、アプリケーションのロジックと特定のケースです。もし都市のどこかに水漏れがあるとすれば、完全に給水システムを停止すると予想されますか?通常、DBクエリが失敗した場合には、さらに処理する意味がない具体的なモジュール/パーツがあります。そのモジュール/パーツだけが終了/停止する必要があります。
  3. PDOの周りに独自のラッピングをしない方が良いです。ほとんどの場合、実際のメリットがなくてもコードを維持するのが難しくなります。
  4. 通常、最善の解決策は、クライアントコードに「申し訳ありませんが、この情報をまだ取得できません」と知らせるHTTPエラー(404 Not Foundまたは500 Internal Server Error)を返すことです。クライアントコードは、このようなエラーを処理する方法 - それはあなたのクライアントコードのロジックに依存します/あなたが特定のエラーを処理するための特定のシナリオを持っている場合にのみ
+0

プロダクションサーバーであるため、エラー報告はオフです。私は** $ conn-> setAttribute(PDO :: ATTR_ERRMODE、PDO :: ERRMODE_EXCEPTION); **を使うべきですか? –

+0

私はPDO固有のフラグに精通していません。一般的に、プロダクションでは、すべての単一エラー/例外をログに書き込む必要があります(ブラウザに表示する必要はありません)。したがって、error_reportingはオフで、log_errorsはオンで、PDOがエラーを記録するために必要なものはすべてオンになっています。 – skyboyer

+0

だから、私は試しにキャッチせずにエラーを記録するのですか? –

3
  1. を流れ。たとえば、重複したユニークキーがありますが、これにはフォールバックシナリオがあります。 (この特定のエラーを常にチェックし、そうでない場合は例外を再度スローする必要があることに注意してください)。
    しかし、通常のクエリでは、@skyboyerと同様に、任意のエラーを処理するだけです。例外は、サイト全体のハンドラにバブルアップする必要があります。
  2. また、それは異なります。特殊な処理シナリオがある場合は、シナリオに念頭に置いてください。しかし、任意のエラーについては、コードが予測できない結果をもたらす可能性があるため、コードの実行を停止することに同意します。
  3. これは2つの質問です。
    • グローバル try catchは、サイト全体の例外ハンドラとして機能し、コード全体をラップすることができます。
    • すべてのクエリを実行するための機能として - それは素晴らしい考えですが、エラー処理とは関係ありません。データベースのエラーはサイト上の他のエラーと同じであるため、まったく同じ方法で処理する必要があります。したがって、クエリ関数用の専用のtry-catchを書くのは意味がありません。 Exceptionをスローさせ、その例外をサイトの他のエラーと同様に処理させます。
  4. 非AJAXエラーとほぼ同じ方法です。再度@skyboyerと同様に、あなたのハンドラを500のHTTPステータスに戻すようにしてください。そして、あなたのAJAX呼び出しコードはエラーがあることを知ります。それで十分です

私は記事を書いてどこに問題を説明しようとしたのですか、あなたは興味深いかもしれませんPHP Error reporting

関連する問題