Codeigniter-manejo de errores al usar active record


Estoy armando algunos modelos para mi sitio codeigniter y parece que no puedo encontrar ninguna palabra en la documentación de cómo manejar los errores que podrían ocurrir al usar el sistema Active Record.

La documentación muestra cómo realizar CRUD junto con algunas consultas relativamente involucradas, pero no se discute en qué parte de la línea se trata el manejo de errores. He hecho una búsqueda rápida en Google y parece que las clases de Active Record no arrojan excepciones. Es este el caso? No intentes atrápalo entonces...

Entonces, ¿cómo codifica para manejar los errores de la base de datos en codeigniter? (conexión fallida, clave duplicada, integridad referencial rota, truncamiento, tipos de datos defectuosos, etc., etc.)

Author: Josh Crozier, 2010-02-05

2 answers

Ya sea que esté utilizando la clase active record o no, puede acceder a los errores de la base de datos utilizando $this->db->_error_message() y $this->db->_error_number().

Si está utilizando una base de datos mysql, estas funciones son equivalentes a mysql_error() y mysql_errno() respectivamente. Puede comprobar estas funciones mirando el código fuente del controlador de base de datos de la base de datos que está utilizando. Están ubicados en sistema / base de datos / controladores.

Entonces, después de ejecutar una consulta, puede verificar si hay errores usando algo como:

if ($this->db->_error_message()) \\handle error
 58
Author: emmychan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-02-05 06:53:49

Directamente desde el foro de soporte de 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);
} 

Tenga en cuenta que también puede registrar los errores de Active Record ingresando en el archivo de configuración de CI app y configurando lo siguiente:

$config['log_threshold'] = 1;
 12
Author: Peter Drinnan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-12-02 04:14:38