Condividi tramite


PDO::errorInfo

Scaricare il driver PHP

Recupera informazioni dettagliate sugli errori dell'ultima operazione dell'handle di database.

Sintassi

array PDO::errorInfo();  

Valore restituito

Una matrice di informazioni sugli errori dell'ultima operazione dell'handle di database. La matrice include i campi seguenti:

  • Codice di errore SQLSTATE.

  • Codice di errore specifico del driver.

  • Messaggio di errore specifico del driver.

Se non si verificano errori o se il valore di SQLSTATE non è impostato, i campi specifici del driver sono NULL.

Osservazioni

PDO::errorInfo recupera solo le informazioni sugli errori per le operazioni eseguite direttamente sul database. Usare PDOStatement::errorInfo quando viene creata un'istanza di PDOStatement mediante PDO::prepare o PDO::query.

Il supporto per PDO è stato aggiunto nella versione 2.0 dei driver Microsoft per PHP per SQL Server.

Esempio

In questo esempio il nome della colonna errato (Cityx anziché City) causa un errore, che viene quindi segnalato.

<?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());  
?>  

Messaggi ODBC aggiuntivi

Quando si verifica un'eccezione, il driver ODBC può restituire più di un errore per diagnosticare i problemi. Tuttavia, PDO::errorInfo visualizza sempre solo il primo errore. In risposta a questo report sui bug, PDO::errorInfo e PDOStatement::errorInfo sono stati aggiornati per indicare che i driver devono visualizzare almeno i tre campi seguenti:

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 partire dalla versione 5.9.0, il comportamento predefinito di PDO::errorInfo consiste nel mostrare errori ODBC aggiuntivi, se disponibili. Ad esempio:

<?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);
}
?>  

L'esecuzione dello script precedente deve avere generato un'eccezione e l'output è simile al seguente:

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 l'utente preferisce il modo precedente, è possibile usare una nuova opzione di configurazione pdo_sqlsrv.report_additional_errors per disattivarla. È sufficiente aggiungere la riga seguente all'inizio di qualsiasi script php:

ini_set('pdo_sqlsrv.report_additional_errors', 0);

In questo caso, quando si esegue lo stesso script di esempio, le informazioni sull'errore visualizzate saranno simili a queste:

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 necessario, l'utente può scegliere di aggiungere la riga seguente al file php.ini per disattivare questa funzionalità in tutti gli script php:

pdo_sqlsrv.report_additional_errors = 0

Avvisi ed errori

A partire dalla versione 5.9.0, gli avvisi ODBC non verranno più registrati come errori. Ciò significa che i codici di errore con prefisso "01" vengono registrati come avvisi. In altre parole, se l'utente vuole registrare solo gli errori, aggiornare il php.ini come segue:

[pdo_sqlsrv]  
pdo_sqlsrv.log_severity = 1

In questo caso, il file di log non conterrà alcun messaggio di avviso. Controllare il funzionamento della registrazione per gli utenti pdo_sqlsrv.

Vedere anche

Classe PDO

PDO

PDOStatement::errorInfo