PDO::errorInfo

Ladda ned PHP-drivrutin

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.