PDO
PHP Manual

Errores y su manejo

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

PDO utiliza el estándar de cadenas de códigos de error SQLSTATE de SQL-92; cada controlador de PDO es responsable de hacer que correspondan 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=testdb;host=127.0.0.1';
$usuario 'usuario';
$contraseña 'contraseña';

try {
    
$gbd = new PDO($dsn$usuario$contraseña);
    
$gbd->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é actualmente esteblecido. Excepciones no capturadas son fatales.

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

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

/*
    Usando try/catch en el constructor sigue siendo válido aunque se establezca ERRMODE a WARNING desde
    PDO::__construct siempre lanzará una PDOException si la conexión falla.
*/
try {
    
$dbh = new PDO($dsn$user$password, 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)
$dbh->query("SELECT columnaincorrecta FROM tablaincorrecta");
?>

El resultado del ejemplo sería:

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


PDO
PHP Manual