de erro PHP DOP com tratamento de erros
- PDO :: ERRMODE_SILENT
Este é o modo padrão. PDO irá simplesmente definir o código de erro, use o PDO :: errorCode () eo método PDO :: errorInfo () para verificar a declaração e banco de dados objetos. Se o erro é devido a é gerado o objeto da instrução de chamada, então você pode chamar esse objeto PDOStatement :: método PDOStatement :: errorInfo () errorCode () ou. Se o erro resultou de uma chamada no objeto de banco de dados, em seguida, chamar esses métodos no objeto de banco de dados.
- PDO :: ERRMODE_WARNING
Além de definir a adição de código de erro, PDO irá emitir uma mensagem E_WARNING tradicional. Se você quiser apenas para ver o que problemas ocorreram sem interromper o fluxo da aplicação, então essa configuração no período de depuração / teste é muito útil.
- PDO :: ERRMODE_EXCEPTION
Além de definir a adição de código de erro, PDO irá lançar uma classe PDOException exceção e definir suas propriedades para refletir as mensagens de código de erro e erro. Essa configuração também é útil durante a depuração, porque um ponto errado ele vai efetivamente ampliar o roteiro, que pode rapidamente apontar potencial código de área problemática (lembre-se: se a exceção faz com que o script para concluir a transação é automaticamente volta rolo).
Outro modo de exceção é muito útil, em comparação com os avisos de estilo tradicional PHP, você pode construir seu próprio gerenciamento de erros de forma mais clara, eo valor de retorno de cada chamada de banco de dados, código padrão anormal necessária em comparação com o modo silencioso e explicitamente verificando / nidificação menos.
Criar uma instância DOP e definir o modo de erro
<?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(); } ?>
Nota: Independentemente de saber se o conjunto atual PDO :: ATTR_ERRMODE, se a conexão falhar, PDO :: __ construct () sempre lançar uma exceção PDOException. exceção não capturada é fatal.
Criar uma instância DOP e definir o modo de erro no construtor
<?php $dsn = 'mysql:dbname=test;host=127.0.0.1'; $user = 'googleguy'; $password = 'googleguy'; /* 使用 try/catch 围绕构造函数仍然有效,即使设置了 ERRMODE 为 WARNING, 因为如果连接失败,PDO::__construct 将总是抛出一个 PDOException 异常。 */ try { $dbh = new PDO($dsn, $user, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING)); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); exit; } // 这里将导致 PDO 抛出一个 E_WARNING 级别的错误,而不是 一个异常 (当数据表不存在时) $dbh->query("SELECT wrongcolumn FROM wrongtable"); ?>
A saída exemplo vontade acima:
Warning: PDO::query(): SQLSTATE[42S02]: Base table or view not found: 1146 Table 'test.wrongtable' doesn't exist in /tmp/pdo_test.php on line 18 add a note add a note