{"id":503,"date":"2009-12-10T09:24:11","date_gmt":"2009-12-10T08:24:11","guid":{"rendered":"http:\/\/www.davidrojas.net\/?p=503"},"modified":"2010-01-07T11:45:45","modified_gmt":"2010-01-07T10:45:45","slug":"manejo-de-errores-en-la-base-de-datos-con-codeigniter","status":"publish","type":"post","link":"https:\/\/www.davidrojas.net\/index.php\/desarrollo-web\/manejo-de-errores-en-la-base-de-datos-con-codeigniter\/","title":{"rendered":"Manejo de errores en MySQL con CodeIgniter"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.davidrojas.net\/wp-content\/uploads\/2009\/12\/codeigniter_mysql_errors.png\" alt=\"codeigniter_mysql_errors\" title=\"codeigniter_mysql_errors\" width=\"163\" height=\"104\" class=\"derecha alignright size-full wp-image-530\" \/>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\u00f3digo, descripci\u00f3n y query ejecutado, tal que as\u00ed:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/www.davidrojas.net\/wp-content\/uploads\/2009\/12\/error_db_ci.png\" alt=\"error_db_ci\" title=\"error_db_ci\" width=\"280\" height=\"144\" class=\"alignright size-full wp-image-533\" \/><\/p>\n<p>Esta p\u00e1gina de error se puede personalizar editando la plantilla <em>\/errors\/error_db.php<\/em> en nuestra carpeta de la aplicaci\u00f3n. El problema es que este mensaje se mostrar\u00e1 en lugar de nuestra vista o en medio de ella, y adem\u00e1s se mostrar\u00e1 siempre a menos que desactivemos la opci\u00f3n de debug de la base de datos, y si lo hacemos nuestra aplicaci\u00f3n fallar\u00e1 silenciosamente, no tenemos forma de capturar este error y realizar las operaciones que nos convengan, lo cual ser\u00eda especialmente \u00fatil cuando hacemos peticiones ajax.<\/p>\n<p>Para solucionar esto existen dos m\u00e9todos no documentados en la clase DB que nos permite capturar el mensaje de error y el n\u00famero:<br \/>\n<em class=\"bold\">$this->db->_error_message()<\/em> y <em class=\"bold\">$this->db->_error_number()<\/em>.<br \/>\n<!--more--><\/p>\n<p>Estos m\u00e9todos son envoltorios de las funciones <em>mysql_error()<\/em> y <em>mysql_errno()<\/em> de php. En la documentaci\u00f3n de mysql podemos encontrar el <a href=\"http:\/\/dev.mysql.com\/doc\/refman\/5.1\/en\/error-handling.html\" title=\"listado errores mysql\">listado de c\u00f3digos de errores<\/a> que nos devuelve <em>mysql_errno()<\/em> (y por lo tanto <em>$this->db->_error_number()<\/em>), por si nos interesa realizar distintas operaciones seg\u00fan el tipo de error ocurrido.<\/p>\n<p>Como ejemplo os mostrar\u00e9 una forma sencilla de gestionar estos mensajes de error:<\/p>\n<p>En primer lugar debemos desactivar el debug de la base de datos poniendo la opci\u00f3n <em class=\"bold\">$db[&#8216;default&#8217;][&#8216;db_debug&#8217;]<\/em> a <em class=\"bold\">FALSE<\/em> en el archivo <em>\/config\/database.php<\/em>.<\/p>\n<p>Despu\u00e9s en nuestro m\u00e9todo del modelo, tras el query a la BD podemos poner:<\/p>\n<pre lang=\"php\">\r\nif($data['error'] = $this->db->_error_message());\r\nreturn $data;\r\n<\/pre>\n<p>En el controlador recogeremos esta variable devuelta y la pasaremos a la vista, y en la parte de la vista que nos interese pondremos:<\/p>\n<pre lang=\"php\">\r\n<?php if(isset($error)) echo '<div class=\"error\">'.$error.'<\/div>';?>\r\n<\/pre>\n<p>De la misma manera podemos manejar los errores v\u00eda ajax devolviendo esta variable codificada con <em>json<\/em> en nuestro controlador y gestion\u00e1ndola en el javascript de la vista.<\/p>\n<p>Finalmente, ante la avalancha de peticiones espero volver en breve con un \u00faltimo videotutorial sobre CodeIgniter.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>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\u00f3digo, descripci\u00f3n y query ejecutado, tal que as\u00ed: Esta p\u00e1gina de error se puede personalizar editando la plantilla \/errors\/error_db.php en nuestra carpeta de la aplicaci\u00f3n. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[13,9,11],"tags":[],"class_list":["post-503","post","type-post","status-publish","format-standard","hentry","category-codeigniter","category-desarrollo-web","category-php"],"_links":{"self":[{"href":"https:\/\/www.davidrojas.net\/index.php\/wp-json\/wp\/v2\/posts\/503","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.davidrojas.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.davidrojas.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.davidrojas.net\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.davidrojas.net\/index.php\/wp-json\/wp\/v2\/comments?post=503"}],"version-history":[{"count":34,"href":"https:\/\/www.davidrojas.net\/index.php\/wp-json\/wp\/v2\/posts\/503\/revisions"}],"predecessor-version":[{"id":644,"href":"https:\/\/www.davidrojas.net\/index.php\/wp-json\/wp\/v2\/posts\/503\/revisions\/644"}],"wp:attachment":[{"href":"https:\/\/www.davidrojas.net\/index.php\/wp-json\/wp\/v2\/media?parent=503"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.davidrojas.net\/index.php\/wp-json\/wp\/v2\/categories?post=503"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.davidrojas.net\/index.php\/wp-json\/wp\/v2\/tags?post=503"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}