CodeIgniterを使って開発していて、データベース処理でエラーがでたときに、Database error: A Database Error Occurred …と出力された。このとき、該当のデータベース処理以降の処理はどうなるのだろうか?
database.phpの設定で動作が変わる
application/config/database.phpの‘db_debug’にtrueを設定していると、エラーが発生した時点で処理終了となる。デフォルトの設定のまま使っていると、この値はtrueだと思う。試しに、以下のコードを実行してみると、log_message()で指定したログは出力されない。
確認プログラム
1 2 3 4 |
//重複キー等で、わざと、エラーとなる処理。 $this->db->insert('some_table', $data); //以下は実行されない。 log_message('debug', '更新に失敗しました。'); |
‘db_debug’にfalseを設定すると、エラーが発生しても、処理終了とならず、続行する。例えば、上の確認プログラムを実行した場合は、ちゃんとログが出力される。
エラー内容を取得する
それでは、‘db_debug’にfalse設定した場合、エラー内容はどうやって拾えば良いのだろうか。これは、$this->db->error()で、取得できる。返り値は配列となっている。
取得例:
[“code”]=>
int(1062)
[“message”]=>
string(45) “Duplicate entry ‘ID123456789’ for key ‘PRIMARY'”
int(1062)
[“message”]=>
string(45) “Duplicate entry ‘ID123456789’ for key ‘PRIMARY'”
エラー処理
ってことで、最終的にこんな形にした。
1 2 3 4 5 6 7 8 9 10 11 12 |
private function insert($data) { $result = $this->db->insert('some_table', $data); //更新系(insert、update等)は、boolが返る。 if (!$result) { log_message('debug', '更新に失敗しました。'); $error = $this->db->error(); log_message('debug', print_r($error, true)); return null; } return $this->db->insert_id(); } |
コメント