Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Lekéri a legutóbbi művelet kiterjesztett hibaadatait az adatbázis fogantyúján.
Syntax
array PDO::errorInfo();
Visszaadott érték
Egy hibainformációs tömbje az adatbázis legutóbbi műveletéről. A tömb a következő mezőkből áll:
Az SQLSTATE hibakód.
A meghajtó-specifikus hibakód.
A driver-specifikus hibaüzenet.
Ha nincs hiba, vagy ha az SQLSTATE nincs beállítva, akkor az illesztőgép-specifikus mezők NULLAK.
Remarks
PDO::errorInfo csak olyan műveletekhez kér hibaadatokat, amelyeket közvetlenül az adatbázison végeznek. Használd a PDOStatement::errorInfo funkciót, amikor PDOStatement példányt PDO::p repare vagy PDO::query segítségével hoznak létre.
A PDO támogatását a Microsoft Drivers for PHP for SQL Server 2.0-s verziójában adták hozzá.
Example
Ebben a példában az oszlop neve rosszul van írva (Cityx helyett City), ami hibát okoz, amelyet aztán jelentenek.
<?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());
?>
További ODBC üzenetek
Ha kivétel történik, az ODBC illesztőprogram több hibát is visszaadhat a problémák diagnosztizálásához. Azonban a PDO::errorInfo mindig csak az első hibát mutatja. Erre a hibajelentésre válaszul a PDO::errorInfo és PDOStatement::errorInfo frissítették, hogy a drivereknek legalább a következő három mezőt kell megjeleníteniük:
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.
Az 5.9.0-tól kezdődően a PDO::errorInfo alapértelmezett viselkedése az, hogy további ODBC hibákat jelenít meg, ha elérhetőek. Például:
<?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);
}
?>
A fenti szkript futtatása kivételt kellett volna eredményeznie, és a kimenet így működik:
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."
}
Ha a felhasználó az előző módot részesíti előnyben, egy új konfigurációs opcióval pdo_sqlsrv.report_additional_errors kikapcsolhatod azt. Egyszerűen, add hozzá a következő sort bármelyik php szkript elején:
ini_set('pdo_sqlsrv.report_additional_errors', 0);
Ebben az esetben a hibaadatok így jelennek meg, amikor ugyanazt a példa szkriptet futtatjuk:
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'."
}
Szükség esetén a felhasználó úgy dönthet, hogy hozzáadja a következő sort a php.ini fájlhoz, hogy kikapcsolja ezt a funkciót minden php szkriptjeiben:
pdo_sqlsrv.report_additional_errors = 0
Figyelmeztetések és hibák
Az 5.9.0-tól kezdve az ODBC figyelmeztetések már nem lesznek hibáként rögzítve. Vagyis a hibakódok "01" előtaggal figyelmeztetésként vannak rögzítve. Más szóval, ha a felhasználó csak hibákat szeretne naplózni, frissítse a php.ini így:
[pdo_sqlsrv]
pdo_sqlsrv.log_severity = 1
Ebben az esetben a naplófájl nem tartalmaz figyelmeztető üzenetet(ek). Kérlek, nézd meg, hogyan működik a naplózás pdo_sqlsrv felhasználók számára.