PDO::errorInfo

Baixar o driver PHP

Recupera informações de erro estendidas da operação mais recente no identificador do banco de dados.

Sintaxe

array PDO::errorInfo();  

Valor retornado

Uma matriz de informações de erro sobre a operação mais recente no identificador do banco de dados. A matriz consiste nos seguintes campos:

  • O código de erro SQLSTATE.

  • O código de erro específico do driver.

  • A mensagem de erro específica do driver.

Se não houver nenhum erro ou se o SQLSTATE não estiver definido, os campos específicos do driver serão NULL.

Comentários

PDO::errorInfo recupera somente informações de erro de operações realizadas diretamente no banco de dados. Use PDOStatement::errorInfo quando uma instância de PDOStatement for criada usando PDO::prepare ou PDO::query.

O suporte para PDO foi adicionado na versão 2.0 dos Drivers da Microsoft para PHP para SQL Server.

Exemplo

Neste exemplo, o nome da coluna está incorreto, Cityx em vez de City, causando um erro, que é, então, relatado.

<?php  
$conn = new PDO( "sqlsrv:server=(local) ; Database = AdventureWorks ", "");  
$query = "SELECT * FROM Person.Address where Cityx = 'Essen'";  
  
$conn->query($query);  
print $conn->errorCode();  
echo "\n";  
print_r ($conn->errorInfo());  
?>  

Mensagens adicionais de ODBC

Quando uma exceção ocorrer, o Driver ODBC poderá retornar mais de um erro para ajudar a diagnosticar problemas. No entanto, a função PDO::errorInfo sempre mostrará apenas o primeiro erro. Em resposta a esse relatório de bugs, as funções PDO::errorInfo e PDOStatement::errorInfo foram atualizadas para indicar que os drivers deverão exibir pelo menos os três campos abaixo:

0	SQLSTATE error code (a five characters alphanumeric identifier defined in the ANSI SQL standard).
1	Driver specific error code.
2	Driver specific error message.

Da versão 5.9.0 em diante, o comportamento padrão de PDO::errorInfo será mostrar erros adicionais de ODBC, se eles estiverem disponíveis. Por exemplo:

<?php  
try {
    $conn = new PDO("sqlsrv:server=$server;", $uid, $pwd);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $conn->prepare("SET NOCOUNT ON; USE $database; SELECT 1/0 AS col1");
    $stmt->execute();
} catch (PDOException $e) {
    var_dump($e->errorInfo);
}
?>  

Executar o script acima deve ter gerado uma exceção, bem como uma saída semelhante a esta:

array(6) {
  [0]=>
  string(5) "01000"
  [1]=>
  int(5701)
  [2]=>
  string(91) "[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Changed database context to 'tempdb'."
  [3]=>
  string(5) "22012"
  [4]=>
  int(8134)
  [5]=>
  string(87) "[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Divide by zero error encountered."
}

Caso o usuário prefira usar o modo anterior, uma nova opção de configuração pdo_sqlsrv.report_additional_errors poderá ser usada para desligá-la. Basta adicionar a seguinte linha no início de um script php:

ini_set('pdo_sqlsrv.report_additional_errors', 0);

Nesse caso, ao executar o mesmo script de exemplo, as informações de erro mostradas serão semelhantes a esta:

array(3) {
  [0]=>
  string(5) "01000"
  [1]=>
  int(5701)
  [2]=>
  string(91) "[Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Changed database context to 'tempdb'."
}

Caso seja necessário, o usuário poderá escolher adicionar a linha abaixo ao arquivo php.ini para desligar esse recurso em todos os scripts php:

pdo_sqlsrv.report_additional_errors = 0

Avisos e erros

Da versão 5.9.0 em diante, os avisos de ODBC não serão mais registrados em log como erros. Isso significa que códigos de erro com o prefixo "01" serão registrados em log como avisos. Em outras palavras, caso o usuário queira registrar somente erros, atualize o php.ini da seguinte maneira:

[pdo_sqlsrv]  
pdo_sqlsrv.log_severity = 1

Nesse caso, o arquivo de log não conterá mensagens de aviso. Verifique de que modo funciona a opção registrar em log para usuários do pdo_sqlsrv.

Consulte Também

PDO Class

PDO

PDOStatement::errorInfo