web-dev-qa-db-ja.com

Codeigniter-アクティブレコードの使用時のエラー処理

私はcodeigniterサイト用にいくつかのモデルをまとめていますが、Active Recordシステムの使用時に発生する可能性のあるエラーを処理する方法のドキュメントでWordを見つけることができないようです。

このドキュメントでは、比較的複雑なクエリとともにCRUDを実行する方法を示していますが、エラー処理については説明していません。 Googleで簡単に検索したところ、Active Recordクラスは例外をスローしないようです。これは事実ですか?キャッチしようとしないで...

それでは、codeigniterでデータベースエラーを処理するためにどのようにコーディングしますか? (接続の失敗、キーの重複、参照整合性の破損、切り捨て、不正なデータ型など)

48
Sergio

アクティブレコードクラスを使用しているかどうかに関係なく、$this->db->_error_message()および$this->db->_error_number()を使用してデータベースエラーにアクセスできます。

Mysqlデータベースを使用している場合、これらの関数はそれぞれmysql_error()およびmysql_errno()と同等です。これらの関数は、使用しているデータベースのデータベースドライバーのソースコードを調べることで確認できます。それらはシステム/データベース/ドライバーにあります。

そのため、クエリを実行した後、次のようなものを使用してエラーをチェックできます。

if ($this->db->_error_message()) \\handle error
58
emmychan

CodeIgniterサポートフォーラムから直接:

$res = $this->db->query($str);

if (!$res) {
  // if query returns null
  $msg = $this->db->_error_message();
  $num = $this->db->_error_number();

  $data['msg'] = "Error(".$num.") ".$msg;
  $this->load->view('customers_edit_view',$data);
} 

CIアプリの構成ファイルに移動して、以下を設定することにより、アクティブレコードエラーを記録することもできます。

$config['log_threshold'] = 1;
12
Peter Drinnan