Gestión de errores y excepciones PDO
Gestión de errores
PHP define una clasificación en niveles de errores que se pueden producir en la ejecución de un programa y ofrece métodos para ajustar el tratamiento de los mismos
Constantes para hacer referencia a cada nivel de error:
- E_NOTICE – avisos
- E_ERROR – errores fatales
Configuración de tratamiento de errores
La configuración inicial de cómo se va a tratar cada error según su nivel se realiza en php.ini
Algunos de los parámetros relacionados son:
- error_reporting – indica qué tipo de errores se mostrarán (E_ALL => todos; ~ => no mostrar)
- display_errors – On/Off: los mensajes se muestran o no en el navegador
Desde código, podemos usar la función error_reporting con las constantes que aparecen en el fichero para cambiar el nivel de notificación
Ejemplo
Se quitan los warnings para no mostrar en el caso de que la división sea entre cero
<?php error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING); $resultado = $dividendo / $divisor; error_reporting(E_ALL & ~E_NOTICE); ?>
Finalmente, la función ini_set() permite modificar directivas de php.ini durante la ejecución del script
set_error_handler
Para obtener más control sobre el proceso, se puede utilizar una función propia de gestión de errores.
<?php set_error_handler("miGestorDeErrores"); $resultado = $dividendo / $divisor; restore_error_handler(); function miGestorDeErrores($nivel, $mensaje) { switch($nivel) { case E_WARNING: echo "Error de tipo WARNING: $mensaje.<br />"; break; default: echo "Error de tipo no especificado: $mensaje.<br />"; } } ?>
Gestión de excepciones
Modelo de excepciones similar al de otros lenguajes de programación (try – catch)
- bloque try – código susceptible de error
- throw – para lanzar una excepción
- bloque(s) catch – encargado de procesar el error
Ejemplo
<?php try { if ($divisor == 0) throw new Exception("División por cero."); $resultado = $dividendo / $divisor; } catch (Exception $e) { echo "Se ha producido el siguiente error: ".$e->getMessage(); } ?>
La clase Exception permite usar getMessage() y getCode() para recibir el mensaje y el código de error, respectivamente
Errores vs excepciones
- Las funciones internas de PHP y muchas extensiones como MySQLi usan el sistema de errores visto anteriormente
- Solo las extensiones más modernas orientadas a objetos, como es el caso de PDO, utilizan este modelo de excepciones
Excepciones con PDO
PDO permite definir la fórmula que usará cuando se produzca un error, utilizando el atributo PDO::ATTR_ERRMODE. Las posibilidades son:
- PDO::ERRMODE_SILENT – se ignoran los errores
- PDO::ERRMODE_WARNING – Genera un error de tipo E_WARNING cuando se produce un error
- PDO::ERRMODE_EXCEPTION – se utiliza el manejador propio PDOException
Ejemplo
<?php $dwes = new PDO("mysql:host=localhost;dbname=dwes", "dwes", "abc123."); $dwes->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); try { $sql = "SELECT * FROM stox"; $result = $dwes->query($sql); … } catch (PDOException $p) { echo "Error ".$p->getMessage()."<br />"; } ?>
El bloque catch mostraría el error, ya que la tabla no existe
Si te ha gustado no olvides compartir en redes sociales.
[addthis tool=»addthis_inline_share_toolbox_6jt6″]
Espero que te haya servido. Cualquier duda deja un comentario. Un saludo