5


2

CodeIgniterでデータベースからのエラーを処理するためのベストプラクティス

私のWebアプリケーションデータベースには一意のキー( date` userid`)を持つテーブルがあります。 既存の date`と userid`を使ってレコードを挿入しようとすると、以下のエラーが出ます。

dupicate key in table

MySQLのエラー番号とメッセージを使用する必要があるため、アプリケーション設定でデータベースデバッガをオンにしました。 今、私はこのエラーを処理する必要があります。 私はコントローラでハードコードされた定数を使うことができます、しかし私はそれが良い考えではないと思います。 私は多くの場所でデータベースのエラー処理が必要です、そしてCodeIgniterのエラー処理は好きではありません。 データベースエラーの処理に関するベストプラクティスは何ですか。

2 Answer


10


私達は私達のプロジェクト構成でこれらのように使用します:

$ this-> db  - > _ error_number(); $ this-> db  - > _ error_message();

しかし、この文書化されていない機能と次のリリースではこれは変わる可能性があります。 もちろん、mysqlのエラー処理関数には標準のphpを使用することができます。

mysql_errno()mysql_error()

内部的にCIはこれらの機能を使用します。

私にとってのベストプラクティスは、カスタムモデルの基本クラス(BaseModel)での使用です。

$ this-> db  - > _ error_number();

そしてエラーを判断し、次に情報エラーメッセージから例外を投げます

$ this-> db  - > _ error_message();

BaseModelから派生したすべてのモデル、およびdbエラーに対する最後の要求をチェックするためのmethodとモデルは例外を処理し、それを処理する必要があります。


1


私はこれをお勧めしますこれについては別の提案があります

$ this-> form_validation-> set_rules( 'email'、 'Email'、 '必須|最大長[32] | valid_email | callback_email_available');

フォームを送信しながら、ルールを定義する必要があります。 データベースと対話するために常にコールバックを使う

コントローラコールバックメソッド

public function email_available($ str){// $ _POST変数にアクセスできます$ this-> load-> model( 'mymodel'); $ result = $ this-> mymodel-> emailAvailability($ _ POST ['email']); if($ result){$ this-> form_validation-> set_message( 'email_available'、 '%sはすでに存在します'); FALSEを返します。 } else {TRUEを返します。 }}

モデル法

パブリック関数emailAvailability($ email){$ this-> db-> where( 'email'、$ email); $ query = $ this-> db-> get( 'tablename'); $ query-> row()を返します。 }

このようにして、常に前面のデータベースエラーを回避し、より良い方法でユーザーに物事を見せることができます。 フォームの検証ですべての処理が行われるため、dbエラーを処理する必要はありません。