Freigeben über


PDO::errorInfo

PHP-Treiber herunterladen

Ruft erweiterte Fehlerinformationen des zuletzt ausgeführten Vorgangs des Datenbankhandles ab.

Syntax

array PDO::errorInfo();  

Rückgabewert

Ein Array mit Fehlerinformationen über den zuletzt ausgeführten Vorgang des Datenbankhandles. Dieses Array besteht aus den folgenden Feldern:

  • Der SQLSTATE-Fehlercode

  • Der treiberspezifische Fehlercode

  • Die treiberspezifische Fehlermeldung

Wenn kein Fehler vorliegt oder wenn der SQLSTATE nicht festgelegt ist, sind die treiberspezifischen Felder NULL.

Bemerkungen

PDO::errorInfo ruft nur die Fehlerinformationen für Vorgänge ab, die direkt in der Datenbank ausgeführt werden. Verwenden Sie PDOStatement::errorInfo, wenn eine PDOStatement-Instanz mit PDO::prepare oder PDO::query erstellt wird.

Unterstützung für PDO wurde in Version 2.0 von Microsoft-Treiber für PHP für SQL Serverhinzugefügt.

Beispiel

In diesem Beispiel ist der Name der Spalte falsch geschrieben (Cityx anstelle von City) und verursacht einen Fehler, der dann gemeldet wird.

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

Weitere ODBC-Meldungen

Wenn eine Ausnahme auftritt, gibt der ODBC-Treiber möglicherweise mehr als einen Fehler zurück, um Sie bei der Problemdiagnose zu unterstützen. PDO::errorInfo zeigt jedoch immer den ersten Fehler an. Als Reaktion auf diesen Fehlerbericht wurden PDO::errorInfo und PDOStatement::errorInfo aktualisiert, sodass Treiber nun angewiesen werden, mindestens die folgenden drei Felder zu zeigen:

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.

Ab Version 5.9.0 besteht das Standardverhalten von PDO::errorInfo darin, weitere ODBC-Fehlermeldungen anzuzeigen, sofern verfügbar. Beispiel:

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

Durch die Ausführung des obigen Skripts sollte eine Ausnahme ausgelöst worden sein und die Ausgabe wie folgt aussehen:

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."
}

Wenn der Benutzer die vorherige Methode bevorzugt, kann die aktuelle mithilfe der neuen Konfigurationsoption pdo_sqlsrv.report_additional_errors deaktiviert werden. Fügen Sie einfach die folgende Zeile am Anfang eines beliebigen PHP-Skripts hinzu:

ini_set('pdo_sqlsrv.report_additional_errors', 0);

In diesem Fall werden die Fehlerinformationen wie folgt angezeigt, wenn Sie das gleiche Beispielskript ausführen:

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'."
}

Bei Bedarf kann der Benutzer die folgende Zeile in der Datei „php.ini“ hinzufügen, um dieses Feature in allen PHP-Skripts zu deaktivieren:

pdo_sqlsrv.report_additional_errors = 0

Warnungen und Fehler

Seit Release 5.9.0 werden ODBC-Warnungen nicht mehr als Fehler protokolliert. Das heißt, das Fehlercodes mit dem Präfix „01“ als Warnungen protokolliert werden. Anders ausgedrückt: Wenn der Benutzer ausschließlich Fehler protokollieren möchte, aktualisieren Sie die Datei „php.ini“ wie folgt:

[pdo_sqlsrv]  
pdo_sqlsrv.log_severity = 1

In diesem Fall enthält die Protokolldatei keine Warnmeldung(en). Überprüfen Sie, wie die Protokollierung für pdo_sqlsrv-Benutzer funktioniert.

Weitere Informationen

PDO-Klasse

PDO

PDOStatement::errorInfo