PDO::errorInfo
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.