El PDO te ofrece 3 diferentes estrategias de manejar errores, para adaptarse al estilo de tu desarrollo de la aplicación.
PDO::ERRMODE_SILENT
Este es el modo por defecto. El PDO simplemente configurará el código de error por ti para revisarlo con los métodos PDO::errorCode() y PDO::errorInfo() en ambas declaraciones y objetos de base de datos; Si el error es dado por una llamada a un objeto de declaración, deberías llamar la función PDOStatement::errorCode() o al el método PDOStatement::errorInfo() en dicho objeto. Si el error es dado por una llamada a la base de datos de objetos, en su lugar deberías invocar estos métodos en la citada base de datos de objetos.
PDO::ERRMODE_WARNING
En adición a la configuración del código de error, el PDO emitira un mensaje tradicional E_WARNING. Esta configuración es útil durante el debugging/testeo, si sólo quieres ver que problemas han ocurrido sin interrumpir el flujo de la aplicación.
PDO::ERRMODE_EXCEPTION
En adición a la configuración del código de error, el PDO lanzará un PDOException y configurará sus propiedades para reflejar el error y dar información sobre dicho error. Esta configuración también será útil durante el debugging, ya que hará saltar eficientemente el script en el lugar del error, señalándonos muy rápidamente áreas pontencialmente problemáticas en tu código (recuerda: las transacciones son automáticamente devueltas si la excepción causa que termine el script).
El modo excepción también es útil porque puedes estructurar tu error manejándolo con más claridad que las advertencias tradicionales del estilo de PHP, y además con menos código/anidación que ejecutándolo en modo silencioso y comprobando explícitamente el valor devuelto de cada llamada a la base de datos.
Mira en Excepciones para más información sobre Excepciones en PHP.
El PDO estandariza las cadenas de códigos de error usando SQL-92 SQLSTATE; los drivers individuales de PDO son responsables de guiar sus códigos nativos a sus apropiados códigos SQLSTATE. El método PDO::errorCode() devuelve un único código SQLSTATE. Si necesitas información específica sobre el error, el PDO también ofrece un método PDO::errorInfo() con el cual devuelve un array conteniendo el código SQLSTATE, el código de error específico del driver y la cadena de error específica.
Ejemplo #1 Crea una instancia PDO y establece el modo error
<?php
$dsn = 'mysql:dbname=testdb;host=127.0.0.1';
$user = 'dbuser';
$password = 'dbpass';
try {
$dbh = new PDO($dsn, $user, $password);
$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
?>