PDO::errorInfo

Stáhnout ovladač PHP

Získává rozšířené chybové informace poslední operace na databázovém handle.

Syntax

array PDO::errorInfo();  

Návratová hodnota

Pole chybových informací o nejnovější operaci na databázovém handle. Pole se skládá z následujících polí:

  • Chybový kód SQLSTATE.

  • Chybový kód specifický pro ovladač.

  • Chybová zpráva specifická pro ovladač.

Pokud chyba není nebo není nastaven SQLSTATE, pak jsou specifická pole pro ovladač NULL.

Remarks

PDO::errorInfo získává chybové informace pouze pro operace prováděné přímo v databázi. Použijte PDOStatement::errorInfo, když je instance PDOStatement vytvořena pomocí PDO::p repare nebo PDO::query.

Podpora PDO byla přidána ve verzi 2.0 Microsoft Drivers for PHP for SQL Server.

Example

V tomto příkladu je název sloupce chybně napsán (Cityx místo ), Citycož způsobí chybu, která je pak nahlášena.

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

Další zprávy ODBC

Když dojde k výjimce, ovladač ODBC může vrátit více než jednu chybu, aby pomohl diagnostikovat problémy. Nicméně PDO::errorInfo vždy zobrazuje pouze první chybu. V reakci na tuto chybu byly aktualizovány PDO::errorInfo a PDOStatement::errorInfo tak, aby uváděly, že ovladače by měly zobrazovat alespoň následující tři pole:

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.

Od verze 5.9.0 je výchozím chováním PDO::errorInfo zobrazování dalších chyb ODBC, pokud jsou dostupné. Příklady:

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

Spuštění výše uvedeného skriptu by mělo vyvolat výjimku a výstup je následující:

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

Pokud uživatel preferuje předchozí způsob, může být použita nová konfigurační možnost pdo_sqlsrv.report_additional_errors k jeho vypnutí. Stačí přidat následující řádek na začátek jakéhokoli php skriptu:

ini_set('pdo_sqlsrv.report_additional_errors', 0);

V tomto případě budou chybové informace zobrazeny takto, když se spustí stejný ukázkový skript:

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

Pokud je to nutné, uživatel může zvolit přidání následujícího řádku do php.ini souboru, aby tuto funkci vypnul ve všech svých php skriptech:

pdo_sqlsrv.report_additional_errors = 0

Upozornění a chyby

Od verze 5.9.0 již varování ODBC nebudou zaznamenávána jako chyby. To znamená, že chybové kódy s předponou "01" jsou zaznamenávány jako varování. Jinými slovy, pokud chce uživatel zaznamenat pouze chyby, aktualizujte php.ini takto:

[pdo_sqlsrv]  
pdo_sqlsrv.log_severity = 1

V takovém případě logovací soubor nebude obsahovat žádné varovné zprávy. Podívejte se, jak funguje logování pro pdo_sqlsrv uživatele.