私はcodeigniterサイト用にいくつかのモデルをまとめていますが、Active Recordシステムの使用時に発生する可能性のあるエラーを処理する方法のドキュメントでWordを見つけることができないようです。
このドキュメントでは、比較的複雑なクエリとともにCRUDを実行する方法を示していますが、エラー処理については説明していません。 Googleで簡単に検索したところ、Active Recordクラスは例外をスローしないようです。これは事実ですか?キャッチしようとしないで...
それでは、codeigniterでデータベースエラーを処理するためにどのようにコーディングしますか? (接続の失敗、キーの重複、参照整合性の破損、切り捨て、不正なデータ型など)
アクティブレコードクラスを使用しているかどうかに関係なく、$this->db->_error_message()
および$this->db->_error_number()
を使用してデータベースエラーにアクセスできます。
Mysqlデータベースを使用している場合、これらの関数はそれぞれmysql_error()
およびmysql_errno()
と同等です。これらの関数は、使用しているデータベースのデータベースドライバーのソースコードを調べることで確認できます。それらはシステム/データベース/ドライバーにあります。
そのため、クエリを実行した後、次のようなものを使用してエラーをチェックできます。
if ($this->db->_error_message()) \\handle error
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;