Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Hämtar utökad felinformation för den senaste operationen på databashandtaget.
Syntax
array PDO::errorInfo();
Returvärde
En array med felinformation om den senaste operationen på databashandtaget. Matrisen består av följande fält:
SQLSTATE-felkoden.
Den drivrutinsspecifika felkoden.
Det drivrutinsspecifika felmeddelandet.
Om det inte finns något fel, eller om SQLSTATE inte är satt, är de drivrutinsspecifika fälten NULL.
Remarks
PDO::errorInfo hämtar endast felinformation för operationer som utförs direkt på databasen. Använd PDOStatement::errorInfo när en PDOStatement-instans skapas med PDO::p repare eller PDO::query.
Stöd för PDO lades till i version 2.0 av Microsoft Drivers för PHP för SQL Server.
Example
I detta exempel stavas kolumnens namn felstavat (Cityx istället för City), vilket orsakar ett fel, som sedan rapporteras.
<?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());
?>
Ytterligare ODBC-meddelanden
När ett undantag uppstår kan ODBC-drivrutinen returnera mer än ett fel för att hjälpa till att felsöka problem. Dock visar PDO::errorInfo alltid bara det första felet. Som svar på denna buggrapport har PDO::errorInfo och PDOStatement::errorInfo uppdaterats för att indikera att drivrutiner bör visa minst följande tre fält:
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.
Från och med 5.9.0 är standardbeteendet för PDO::errorInfo att visa ytterligare ODBC-fel, om de finns tillgängliga. Ett exempel:
<?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);
}
?>
Att köra ovanstående skript borde ha kastat ett undantag, och utdata är så här:
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."
}
Om användaren föredrar det tidigare sättet kan ett nytt konfigurationsalternativ pdo_sqlsrv.report_additional_errors användas för att stänga av det. Lägg helt enkelt till följande rad i början av ett php-skript:
ini_set('pdo_sqlsrv.report_additional_errors', 0);
I det här fallet kommer felinformationen som visas att vara så här, när man kör samma exempelskript:
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'."
}
Om det behövs kan användaren välja att lägga till följande rad i php.ini-filen för att stänga av denna funktion i alla sina php-skript:
pdo_sqlsrv.report_additional_errors = 0
Varningar och fel
Från och med 5.9.0 kommer ODBC-varningar inte längre att loggas som fel. Det vill säga, felkoder med prefix "01" loggas som varningar. Med andra ord, om användaren bara vill logga fel, uppdatera php.ini så här:
[pdo_sqlsrv]
pdo_sqlsrv.log_severity = 1
I detta fall kommer loggfilen inte att innehålla några varningsmeddelanden. Vänligen kontrollera hur loggning fungerar för pdo_sqlsrv användare.