PDO::ERRMODE_SILENT
Este es el modo predeterminado. PDO simplemente establecerá el código de error, que se puede verificar usando los métodos PDO::errorCode() y PDO::errorInfo() en declaraciones y objetos de base de datos. Si el error se produce debido a una llamada a un objeto de declaración, puede llamar al método PDOStatement::errorCode() o PDOStatement::errorInfo() de ese objeto. Si el error se debe a la llamada a un objeto de base de datos, entonces se pueden llamar a los dos métodos anteriores en el objeto de base de datos.
PDO::ERRMODE_WARNING
Además de configurar el código de error, PDO también enviará un mensaje E_WARNING tradicional. Esta configuración es útil durante la depuración/prueba si solo desea ver qué está fallando sin interrumpir el flujo de su aplicación.
PDO::ERRMODE_EXCEPCIÓN
Además de configurar el código de error, PDO también generará una clase de excepción PDOException y establecerá sus propiedades para reflejar el código de error y la información del error. Esta configuración también es muy útil durante la depuración, ya que efectivamente amplía el punto del script donde ocurrió el error, lo que le permite identificar muy rápidamente áreas potencialmente problemáticas en el código (recuerde: si una excepción hace que el script finalice, el la transacción se revierte automáticamente).
Otra cosa muy útil sobre el modo de excepción es que puede crear su propio manejo de errores de manera más clara que las advertencias tradicionales de estilo PHP, y requiere menos código que el modo silencioso y verificar explícitamente el valor de retorno de cada llamada a la base de datos/Menos anidado.
<?php$dsn = 'mysql:dbname=testdb;host=127.0.0.1';$usuario = 'dbuser';$contraseña = 'dbpass';try { $dbh = nuevo PDO($dsn, $usuario, $contraseña ); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);} captura (PDOException $e) { echo 'Error de conexión: ' $e->getMessage();}?>
Nota: Independientemente de si PDO::ATTR_ERRMODE está configurado actualmente, PDO::__construct() siempre generará una PDOException si falla la conexión. Las excepciones no detectadas son fatales.
<?php$dsn = 'mysql:dbname=test;host=127.0.0.1';$user = 'googleguy';$password = 'googleguy';/* El uso de try/catch alrededor del constructor todavía funciona incluso si ERRMODE está configurado ADVERTENCIA porque PDO::__construct siempre generará una PDOException si falla la conexión. */try { $dbh = nuevo 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 genere un E_WARNING error de nivel, en lugar de una excepción (cuando la tabla de datos no existe) $dbh->query("SELECCIONAR columna incorrecta DESDE tabla incorrecta");?>
La rutina anterior generará:
Advertencia: PDO::query(): SQLSTATE[42S02]: Tabla base o vista no encontrada: 1146 La tabla 'test.wrongtable' no existe en/tmp/pdo_test.php en la línea 18agregar una nota agregar una nota