Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Recupera informação de erro estendida da operação mais recente no handle da base de dados.
Syntax
array PDO::errorInfo();
Valor de retorno
Um conjunto de informações de erro sobre a operação mais recente no handle da base de dados. O array 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 erro, ou se o SQLSTATE não estiver definido, então os campos específicos do driver são NULL.
Observações
O PDO::errorInfo apenas recupera informações de erro para operações realizadas diretamente na base de dados. Use PDOStatement::errorInfo quando uma instância de PDOStatement for criada usando PDO::p repare ou PDO::query.
O suporte para PDO foi adicionado na versão 2.0 dos Microsoft Drivers for PHP para SQL Server.
Example
Neste exemplo, o nome da coluna está escrito incorretamente (Cityx em vez de City), causando um erro, que é depois reportado.
<?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 ODBC adicionais
Quando ocorre uma exceção, o Driver ODBC pode devolver mais do que um erro para ajudar a diagnosticar problemas. No entanto, o PDO::errorInfo mostra sempre apenas o primeiro erro. Em resposta a este relatório de bug, PDO::errorInfo e PDOStatement::errorInfo foram atualizados para indicar que os drivers devem mostrar pelo menos os seguintes três campos:
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.
A partir da 5.9.0, o comportamento padrão do PDO::errorInfo é mostrar erros ODBC adicionais, se 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 deveria ter lançado uma exceção, e o resultado é assim:
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."
}
Se o utilizador preferir a forma anterior, pode ser usada uma nova opção pdo_sqlsrv.report_additional_errors de configuração para a desativar. Basta adicionar a seguinte linha no início de qualquer script php:
ini_set('pdo_sqlsrv.report_additional_errors', 0);
Neste caso, a informação de erro mostrada será assim, ao executar o mesmo script de exemplo:
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'."
}
Se necessário, o utilizador pode optar por adicionar a seguinte linha ao ficheiro php.ini para desligar esta funcionalidade em todos os seus scripts php:
pdo_sqlsrv.report_additional_errors = 0
Avisos e erros
A partir da 5.9.0, os avisos ODBC deixarão de ser registados como erros. Ou seja, os códigos de erro com o prefixo "01" são registados como avisos. Ou seja, se o utilizador quiser registar apenas erros, atualize a php.ini assim:
[pdo_sqlsrv]
pdo_sqlsrv.log_severity = 1
Neste caso, o ficheiro de registo não conterá nenhuma mensagem de aviso. Por favor, verifique como funciona o registo para pdo_sqlsrv utilizadores.