PDO
PHP Manual

Errores y su manejo

PDO ofrece tres estrategias diferentes de manejar errores para adaptarse a cualquier estilo de desarrollo de aplicaciones.

PDO utiliza las cadenas de código de error SQLSTATE del estándar SQL-92; cada controlador de PDO es responsable de la correspondencia de su códigos nativos con los códigos SQLSTATE apropiados. El método PDO::errorCode() devuelve un único código SQLSTATE. Si fuera necesaria más información específica sobre el error, PDO también ofrece el método PDO::errorInfo(), que devuelve un array que contiene el código SQLSTATE, el código de error específico del controlador, y la cadena de error específica.

Ejemplo #1 Crear una instancia de PDO y establecer el modo de error

<?php
$dsn 
'mysql:dbname=prueba;host=127.0.0.1';
$usuario 'usuario';
$contraseña 'contraseña';

try {
    
$mbd = new PDO($dsn$usuario$contraseña);
    
$mbd->setAttribute(PDO::ATTR_ERRMODEPDO::ERRMODE_EXCEPTION);
} catch (
PDOException $e) {
    echo 
'Falló la conexión: ' $e->getMessage();
}

?>

Nota:

PDO::__construct() siempre lanzará una PDOException si la conexión falla, independientemente de que PDO::ATTR_ERRMODE esté esteblecido. Las excepciones no capturadas son fatales.

Ejemplo #2 Crear una instancia de PDO y establecer el modo de error desde el constructor

<?php
$dsn 
'mysql:dbname=prueba;host=127.0.0.1';
$usuario 'usuario';
$contraseña 'contraseña';

/*
    El empleo de try/catch en el constructor sigue siendo válido aunque se establezca ERRMODE a WARNING,
    ya que PDO::__construct siempre lanzará una PDOException si la conexión falla.
*/
try {
    
$mbd = new PDO($dsn$usuario$contraseña, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
} catch (
PDOException $e) {
    echo 
'Error de conexión: ' $e->getMessage();
    exit;
}

// Esto hará que PDO lance un error de nivel E_WARNING en lugar de una excepción (cuando la tabla no exista)
$mbd->query("SELECT columna_incorrecta FROM tabla_incorrecta");
?>

El resultado del ejemplo sería:

Warning: PDO::query(): SQLSTATE[42S02]: Base table or view not found: 1146 Table 'prueba.tabla_incorrecta' doesn't exist in
/tmp/prueba_pdo.php on line 18


PDO
PHP Manual