Вы находитесь на странице: 1из 7

16-10-12 Manejo de errores en MySQL con CodeIgniter « David Rojas - Diseño y desarrollo web

Manejo de errores en MySQL con CodeIgniter
Master Digital Journalism
Become a New­Media Journalist! Choose from Six Specializations.
www.ie.edu/communication

Cuando tenemos un error conectando o realizando operaciones con la base de datos (MySQL) usando
CodeIgniter, lo normal es que el sistema nos muestre un mensaje por defecto con el código, descripción y query ejecutado, tal que
así:

Esta página de error se puede personalizar editando la plantilla /errors/error_db.php en nuestra carpeta de la aplicación. El
problema es que este mensaje se mostrará en lugar de nuestra vista o en medio de ella, y además se mostrará siempre a menos que
desactivemos la opción de debug de la base de datos, y si lo hacemos nuestra aplicación fallará silenciosamente, no tenemos
forma de capturar este error y realizar las operaciones que nos convengan, lo cual sería especialmente útil cuando hacemos
peticiones ajax.

Para solucionar esto existen dos métodos no documentados en la clase DB que nos permite capturar el mensaje de error y el
número:
$this­>db­>_error_message() y $this­>db­>_error_number().

Estos métodos son envoltorios de las funciones mysql_error() y mysql_errno() de php. En la documentación de mysql podemos
encontrar el listado de códigos de errores que nos devuelve mysql_errno() (y por lo tanto $this­>db­>_error_number()), por si
nos interesa realizar distintas operaciones según el tipo de error ocurrido.

Como ejemplo os mostraré una forma sencilla de gestionar estos mensajes de error:

En primer lugar debemos desactivar el debug de la base de datos poniendo la opción $db['default']['db_debug'] a FALSE en el
archivo /config/database.php.

Después en nuestro método del modelo, tras el query a la BD podemos poner:

if($data['error'] = $this->db->_error_message());
return $data;

davidrojas.net/index.php/…/manejo-de-errores-en-la-base-de-datos-con-codeigniter/ 1/7
16-10-12 Manejo de errores en MySQL con CodeIgniter « David Rojas - Diseño y desarrollo web

En el controlador recogeremos esta variable devuelta y la pasaremos a la vista, y en la parte de la vista que nos interese
pondremos:

<?php if(isset($error)) echo '<div class="error">'.$error.'</div>';?>

De la misma manera podemos manejar los errores vía ajax devolviendo esta variable codificada con json en nuestro controlador y
gestionándola en el javascript de la vista.

Finalmente, ante la avalancha de peticiones espero volver en breve con un último videotutorial sobre CodeIgniter.

Compartir:

Twittear 2 Me gusta 0 Share

Creado el Jueves, 10 de diciembre, 2009 a las 9:24 AM y archivado en CodeIgniter, Desarrollo Web, PHP. Puedes seguir los
comentarios de esta entrada a través del feed RSS 2.0. También puedes dejar un comentario, o trackback desde tu propia web.

« Videotutorial: CRUD con scaffolding, rendimiento y unit testing en CodeigniterEnlaces Fuentes en la web con @font­face »

Sideboard
Tee München
Kurierdienst
Versicherungsmakler
カードローン

15 comentarios para “Manejo de errores en MySQL con CodeIgniter”

1.   Julian dice:
diciembre 10, 2009 a las 6:01 PM

Interesante solución. Saludos!

2.  Manejo de errores en MySQL con CodeIgniter | DbRunas dice:
diciembre 10, 2009 a las 7:33 PM

[...] http://www.davidrojas.net/index.php/desarrollo­web/manejo­de­errores­en­la­base­de­datos­con­codeign…
AKPC_IDS += "2967,"; [...]

3.   Ander dice:
febrero 11, 2010 a las 9:56 AM

Para obtener errores de conexión en bases de datos, no se puede utilizar la solución que propones, puesto que al no haber
conexión, las funciones _error_message y _error_number fallan al no existir un id de conexión.

Para el caso concreto de la conexión, yo utilizo la propiedad conn_id de la base de datos para comprobar si la conexión se
ha realizado correctamente o no.

A modo de ejemplo:
$db = $this­>load­>database(‘nombre_db’, TRUE);
if (!$db­>conn_id) {
echo “DB connection error!”;
//hacer aqui lo que sea para recuperar el error….;
}

davidrojas.net/index.php/…/manejo-de-errores-en-la-base-de-datos-con-codeigniter/ 2/7
16-10-12 Manejo de errores en MySQL con CodeIgniter « David Rojas - Diseño y desarrollo web

4.   David Rojas dice:
febrero 11, 2010 a las 10:49 AM

@Ander Tienes toda la razón, precisamente hace un par de días me ocurrió, que me falló al tener los datos user/pass mal
puestos. Para el resto de errores sí funciona. Gracias por la aportación 

5.   Dani dice:
septiembre 28, 2010 a las 5:58 PM

Hola David, tengo un problema con el manejo de errores en codeigniter:

try{
foreach($csvData as $value){
$p = new Productos();
$p­>nombre = $value['N'];
$p­>precio = $value['P']; //’P’ No existe.
//…
}
}
catch (Exception $ex){
echo ‘—>’.$ex;
}

Bien, el array $value['P'] No existe, sin embargo la excepción no me salta al catch.
Como puedo solucionarlo?

Gracias y felicitaciones por los artículos.

6.   David Rojas dice:
septiembre 30, 2010 a las 9:17 PM

@Dani Esto no es un problema de CodeIgniter, es PHP simplemente. ¿Lanzas el error en algún sitio? No sé si sabes como
funcionan la captura de errores, pero para capturar excepciones debes lanzarla primero donde toque, mira los ejemplos:
http://php.net/manual/es/language.exceptions.php

7.   Dani dice:
octubre 1, 2010 a las 2:06 PM

Gracias por la información David.

Pensaba que codeigniter lanzaba las excepciones por si solo.

Sí, lo tenia parcheado haciendo una comprobación antes del array

if( !isset($value['P']) )throw new Exception (‘No existe P);

Es una pena que no siguas con los webcast de este framework y más ahora que está apunto de salir la 2.1, pero gracias
igualmente porque me resultaron muy útiles para iniciarme.

Saludos y gracias nuevamente.

8.   David Rojas dice:
octubre 4, 2010 a las 6:39 PM

davidrojas.net/index.php/…/manejo-de-errores-en-la-base-de-datos-con-codeigniter/ 3/7
16-10-12 Manejo de errores en MySQL con CodeIgniter « David Rojas - Diseño y desarrollo web

@Dani Quizá cuando salga la versión 2.0 oficial (la 1.7.2 sigue siendo la rama estable) haga uno nuevo.

9.   Germán dice:
noviembre 28, 2010 a las 8:31 PM

David, gracias por la solucion. Queria preguntarte tambien, cuando hago un delete, tendria que preguntar algo como

$this­>db­>delete() //con el nombre de la tabla y los agumentos de la funcion evidentemente.
if (isset($this­>db­>_error_message())

o no?

10.   David Rojas dice:
noviembre 28, 2010 a las 9:46 PM

@Germán Sí, un delete también puede dar un error.

11.   galax dice:
mayo 7, 2011 a las 6:39 PM

hola amigo, gracias por todo .

me gustaria saber cuando empiezas con las novedades de codeigniter 2.0

12.   Eduardo Castro dice:
julio 8, 2011 a las 2:09 AM

Hola amigos me ha servido de mucho esto de controlar errores de la base de datos.

muchas gracias de esta forma el codigo ahora es mas limpio.

un 10.

saludos

13.   jose dice:
agosto 13, 2011 a las 12:56 AM

hola david quisiera consultarte como puedo ver datos blob en codeigniter por que cuando incluyo en un php dentro del
view el codigo php:

imagen
?>

me da como resultado:
error al tratar de mostrar la imagen de http://localhost/prueba/mostrarimagen/

yo pensaba que no trahia los resultados pero cuando borro el header si me los muestra en codigos ascii
que podria hacer
de ante mano muchas gracias …

14.   Leo dice:
agosto 16, 2011 a las 1:56 PM

davidrojas.net/index.php/…/manejo-de-errores-en-la-base-de-datos-con-codeigniter/ 4/7
16-10-12 Manejo de errores en MySQL con CodeIgniter « David Rojas - Diseño y desarrollo web

Hola a todos, muy interesante el post, sobre lo que dice Ander para controlar el error de conexion, ¿si la conexión está
configurada como automática y no hacemos el “load­>database” como podemos controlarla?

“Para obtener errores de conexión en bases de datos, no se puede utilizar la solución que propones, puesto que al no haber
conexión, las funciones _error_message y _error_number fallan al no existir un id de conexión.

Para el caso concreto de la conexión, yo utilizo la propiedad conn_id de la base de datos para comprobar si la conexión se
ha realizado correctamente o no.

A modo de ejemplo:
$db = $this­>load­>database(‘nombre_db’, TRUE);
if (!$db­>conn_id) {
echo “DB connection error!”;
//hacer aqui lo que sea para recuperar el error….;
}”

un saludo y gracias

15.   cheme dice:
abril 29, 2012 a las 5:34 PM

justo lo que estaba buscando, excelente articulo. saludos

Deja un comentario

Introduce tu información personal en el formulario, regístrate o identifícate usando twitter con el siguiente botón.

 Nombre (obligatorio)

 E­mail (no será publicado) (obligatorio)

 Página web

Enviar comentario

   

Categorías

davidrojas.net/index.php/…/manejo-de-errores-en-la-base-de-datos-con-codeigniter/ 5/7
16-10-12 Manejo de errores en MySQL con CodeIgniter « David Rojas - Diseño y desarrollo web

CodeIgniter 9
CSS 7
Desarrollo Personal 1
Desarrollo Web 22
Diseño Web 7
Gadgets 1
jQuery 4
Marketing & SEO 2
PHP 11
Screencasts 12

¿Cuál es tu
mayor deseo?
Hazlo realidad
con la nueva
promo de
Whirlpool.
¡Participa y gana!
www.whirlpoolwishlist.…

Archivos
enero 2011
octubre 2010
julio 2010
mayo 2010
abril 2010
marzo 2010
febrero 2010
enero 2010
diciembre 2009
noviembre 2009
octubre 2009
septiembre 2009
agosto 2009
julio 2009
mayo 2009
abril 2009

davidrojas.net/index.php/…/manejo-de-errores-en-la-base-de-datos-con-codeigniter/ 6/7
16-10-12 Manejo de errores en MySQL con CodeIgniter « David Rojas - Diseño y desarrollo web

Professional CodeIgniter
Thomas Myer
  Buy New £25.49

Privacy Information

Registrarse
Acceder

Sobre mí

Vivo en Alicante (España), aunque estudio y trabajo en la UMH de Elche. Si te apetece invitarme a un café, no dudes en
enviarme un mensaje.

Navegación

Home
Blog
Portfolio
Varios
Contacto

Conecta

Suscríbete al Blog (RSS)
Follow me (Twitter)
Facebook
LinkedIn
Regálame un libro!

No public Twitter messages.
(c) David Rojas 2010

davidrojas.net/index.php/…/manejo-de-errores-en-la-base-de-datos-con-codeigniter/ 7/7

Вам также может понравиться