2012-01-30 4 views
0

mysql::query()でUPDATEクエリを実行した後、mysqli::errorまたはmysqli::errnoをチェックしてエラーメッセージまたは番号を確認できます。UDPDATEクエリの後に `mysqli :: errno`を検査して、トリガの致命的エラーか警告を確定する

これはエラーを記録するのに便利ですが、エラーの重大度に基づいて決定する必要があります。

  • ロジックエラー(行が存在しない、値が無効)の場合は実行を中止する必要があります。
  • データベースにアクセスできない場合、または類似のものがあれば、エラーを記録するだけでプログラムの実行を停止する必要があります。

    1. エラー番号を検査できます。たとえば、列が不明な場合にエラー1054が返されます。問題は1000個のエラーの近くのmysqlマニュアルリストなので、問題に関連するエラー条件が1つしか欠落しても、どの方法が適切かはわからず、非常に危険になる可能性があります。
    2. その他の問題は、エラーが返されないために行がテーブルにない場合です。

この状態をチェックするための一般的なアプローチは何ですか?

答えて

1

まず、自分の期待を概説してから、よくあることを聞きます。データベース層がデータベースへの接続に失敗した場合、データベース例外をスローすることが一般的だと私は言います。だから、何らかのシステムレベルで何かが失敗したことは明らかです。

データベースとやりとりするために作成されたアプリケーションでは、これらのデータベース例外を処理する方法を決定する必要があります。通常、データベースが動作することを期待するコードは、存在しない場合は動作しません。

ロジックエラーと呼ばれるケースに対応しました。それは多くのことに依存します。私は特定のデータベースエラーコード(時間が経つにつれて変化するかもしれないし、新しいバージョンで新しいものが加えられ、古いものはもはや使用されないかもしれない)に集中するつもりはない。代わりに、あるオペレーションのリターンデータが期待通りであるかどうかに集中し、そうしない場合に備えてそのような値を提供します。

例:アップデートが重要で、アップデートが成功したかどうかを確認する必要がある場合は、それをよく確認してください。しかし、それが重要かどうかを判断するのはデータベース層の一部ではありません。これはアプリケーションコードの一部です(例: ドメインモデルまたはトランザクションスクリプト。あなたがあなた自身の例外をスローする必要があります接続エラーの場合

class mysqli_sql_exception extends RuntimeException 

のMysqli自体がすでに状況下で、いくつかの例外を投げることができる、拡張子を持つ一つの例外があります。したがって、戻り値をチェックし、データベース例外をスローします。

+0

問題は(少なくともUPDATESのために) 'mysqli :: query()'は単にTRUEまたはFALSEを返します。それ以降のエラーチェックは 'mysqli :: errno'に依存します。マニュアル(http://www.php.net/manual/es/mysqli.query.php)は、投げられる例外を指定していません。私は、エラーがプログラマーの障害かサーバーの問題かどうかを知りたい。クエリを実行する前に自分でチェックする必要がありますか? –

+0

プログラマーのエラーはどういう意味ですか?この関数は失敗時には 'FALSE'を返し、成功時には 'TRUE'または結果識別子を返します。具体的に例を挙げて、アップデートで何をテストしたいですか? – hakre

+0

プログラムが間違っているかどうかを知りたい。私が列が存在しないか、DBにない行を更新しようとしているとしましょう。これは起こらないはずの状況なので、コードをチェックする必要があります。この状況でシステムが別のパスをとる場合や、プログラマー以外のエラーが発生した場合(ディスクがいっぱいで、DBにアクセスできない場合など)に役立ちます。 –