Gestionar errores mysql con CodeIgniter
Estoy manejando relaciones en mi base de datos y como consecuencia he impuesto restricciones como por ejemplo:
No se puede eliminar un NIVEL cuando esta siendo usado en otra tabla.
En mi modulo NIVELES esta la opcion para eliminar un nivel. Cuando el nivel no esta siendo usado se elimina correctamente con esta linea de codigo:
$this->db->delete('NIVEL',array('NIV_ID'=>$_POST["NIV_ID_SELECCIONADO"])); if($this->db->affected_rows()!=0){ echo "{success: true, msg:'El nivel se ha eliminado correctamente.'}"; }else{ echo "{success: false, msg:'El nivel no se puede eliminar.'}"; }Al principio pense que con el ELSE podria manejar la situacion cuando el nivel este siendo utilizado. Ahora bien cuando trato de eliminar un NIVEL que esta siendo usando CodeIgniter me genera una pagina de error como la siguiente: (esto lo puedo ver usando el FireBug con Firefox)
<html> <head> <title>Database Error</title> <style type="text/css"> body { background-color: #fff; margin: 40px; font-family: Lucida Grande, Verdana, Sans-serif; font-size: 12px; color: #000; } #content { border: #999 1px solid; background-color: #fff; padding: 20px 20px 12px 20px; } h1 { font-weight: normal; font-size: 14px; color: #990000; margin: 0 0 4px 0; } </style> </head> <body> <div id="content"> <h1>A Database Error Occurred</h1> <p>Error Number: 1451</p><p>Cannot delete or update a parent row: a foreign key constraint fails (`bd_sgav2`.`centro_trabajo`, CONSTRAINT `centro_trabajo_ibfk_1` FOREIGN KEY (`NIV_ID`) REFERENCES `nivel` (`NIV_ID`) ON UPDATE NO ACTION)</p><p>DELETE FROM `NIVEL` WHERE `NIV_ID` = '1'</p> </div> </body> </html>En vez de esto quisiera tomar el numero de error y hacer algo asi:
mysql_connect("servidor","usuario","clave"); switch(mysql_errno()) { case 2003: echo "No se pudo conectar al servidor"; ... }Pero Codeigniter solamente me genera la pagina que ya mostre. Lo que necesito es obtener el numero de error y en base a eso generar un mensaje en formato JSON para que ExtJS lo pueda mostrar. Alguna idea? Espero haberme explicado. De antemano gracias por la ayuda que me puedan brindar.
¿Conoces a alguien que pueda responder esta pregunta? Comparte el link en Twitter o Facebook
Es necesario registrarse para poder participar en el foro! Si ya tienes una cuenta puedes entrar y comentar en este foro.