Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Pobiera rozszerzone informacje o błędach najnowszej operacji na uchwytie bazy danych.
Syntax
array PDO::errorInfo();
Wartość zwracana
Tablica informacji o błędach dotyczących najnowszej operacji na ręce bazy danych. Tablica składa się z następujących pól:
Kod błędu SQLSTATE.
Kod błędu specyficzny dla sterownika.
Komunikat o błędzie specyficznym dla sterownika.
Jeśli nie ma błędu lub SQLSTATE nie jest ustawiony, to pola specyficzne dla sterownika są NULL.
Remarks
PDO::errorInfo pobiera informacje o błędzie tylko dla operacji wykonanych bezpośrednio w bazie danych. Używaj PDOStatement::errorInfo, gdy instancja PDOStatement jest tworzona za pomocą PDO::p repare lub PDO::query.
Wsparcie dla PDO zostało dodane w wersji 2.0 sterowników Microsoft dla PHP dla SQL Server.
Example
W tym przykładzie nazwa kolumny jest błędnie napisana (Cityx zamiast ), Cityco powoduje błąd, który następnie jest zgłaszany.
<?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());
?>
Dodatkowe wiadomości ODBC
Gdy wystąpi wyjątek, sterownik ODBC może zwracać więcej niż jeden błąd, aby pomóc w diagnozowaniu problemów. Jednak PDO::errorInfo zawsze pokazuje tylko pierwszy błąd. W odpowiedzi na ten zgłoszenie błędu, PDO::errorInfo i PDOStatement::errorInfo zostały zaktualizowane, aby wskazać, że sterowniki powinny wyświetlać co najmniej następujące trzy pola:
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.
Począwszy od wersji 5.9.0, domyślne zachowanie PDO::errorInfo polega na wyświetlaniu dodatkowych błędów ODBC, jeśli są dostępne. Przykład:
<?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);
}
?>
Uruchomienie powyższego skryptu powinno wywołać wyjątek, a wynik wygląda tak:
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."
}
Jeśli użytkownik woli poprzednią metodę, można użyć nowej opcji pdo_sqlsrv.report_additional_errors konfiguracji, aby ją wyłączyć. Wystarczy dodać następujący wiersz na początku dowolnego skryptu PHP:
ini_set('pdo_sqlsrv.report_additional_errors', 0);
W tym przypadku informacje o błędzie wyświetlane będą następujące, gdy uruchamiamy ten sam przykładowy skrypt:
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'."
}
W razie potrzeby użytkownik może dodać następującą linię do pliku php.ini, aby wyłączyć tę funkcję we wszystkich swoich skryptach PHP:
pdo_sqlsrv.report_additional_errors = 0
Ostrzeżenia i błędy
Począwszy od wersji 5.9.0, ostrzeżenia ODBC nie będą już rejestrowane jako błędy. Oznacza to, że kody błędów z prefiksem "01" są rejestrowane jako ostrzeżenia. Innymi słowy, jeśli użytkownik chce rejestrować tylko błędy, zaktualizuj php.ini w następujący sposób:
[pdo_sqlsrv]
pdo_sqlsrv.log_severity = 1
W takim przypadku plik logu nie będzie zawierał żadnych komunikatów ostrzegawczych. Proszę sprawdzić, jak działa logowanie dla pdo_sqlsrv użytkowników.