PDO::ERRMODE_SILENT
Este é o modo padrão. O PDO simplesmente definirá o código de erro, que pode ser verificado usando os métodos PDO::errorCode() e PDO::errorInfo() em instruções e objetos de banco de dados. Se o erro ocorrer devido a uma chamada para um objeto de instrução, você pode chamar o método PDOStatement::errorCode() ou PDOStatement::errorInfo() desse objeto. Se o erro for causado pela chamada de um objeto de banco de dados, os dois métodos acima poderão ser chamados no objeto de banco de dados.
PDO::ERRMODE_WARNING
Além de definir o código de erro, o PDO também enviará uma mensagem tradicional E_WARNING. Essa configuração é útil durante a depuração/teste se você quiser apenas ver o que está errado sem interromper o fluxo do seu aplicativo.
PDO::ERRMODE_EXCEPTION
Além de definir o código de erro, o PDO também lançará uma classe de exceção PDOException e definirá suas propriedades para refletir o código de erro e as informações do erro. Essa configuração também é muito útil durante a depuração, pois amplia efetivamente o ponto do script onde o erro ocorreu, permitindo identificar rapidamente possíveis áreas problemáticas no código (lembre-se: se uma exceção fizer com que o script termine, o transação é revertida automaticamente).
Outra coisa muito útil sobre o modo de exceção é que você pode criar seu próprio tratamento de erros com mais clareza do que os avisos tradicionais no estilo PHP e requer menos código do que o modo silencioso e verifica explicitamente o valor de retorno de cada chamada de banco de dados /Less aninhado.
<?php$dsn = 'mysql:dbname=testdb;host=127.0.0.1';$user = 'dbuser';$password = 'dbpass';tentar { $dbh = new PDO($dsn, $user, $password ); $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);} capturar (PDOException $e) { echo 'Falha na conexão: ' $e->getMessage();}?>
Nota: Independentemente de PDO::ATTR_ERRMODE estar atualmente definido, PDO::__construct() sempre lançará uma PDOException se a conexão falhar. Exceções não detectadas são fatais.
<?php$dsn = 'mysql:dbname=test;host=127.0.0.1';$user = 'googleguy';$password = 'googleguy';/* Usar try/catch em torno do construtor ainda funciona mesmo se ERRMODE estiver definido AVISO porque PDO::__construct sempre lançará uma PDOException se a conexão falhar. */try { $dbh = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));} catch (PDOException $e) { echo 'Falha na conexão: ' . e->getMessage(); exit;}// Isso fará com que o PDO lance um E_WARNING erro de nível, em vez de uma exceção (quando a tabela de dados não existe) $dbh->query("SELECT erradacoluna FROM tabela errada");?>
A rotina acima produzirá:
Aviso: PDO::query(): SQLSTATE[42S02]: Tabela base ou visualização não encontrada: 1146 A tabela 'test.wrongtable' não existe em/tmp/pdo_test.php na linha 18adicione uma nota adicione uma nota