Gestión de errores y excepciones PDO

Gestión de errores y excepciones PDO

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

  • 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.

Espero que te haya servido. Cualquier duda deja un comentario. Un saludo

Dejar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Translate »
Ir a la barra de herramientas