Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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.