Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Извлекает расширенные сведения об ошибке для последней операции с дескриптором базы данных.
Синтаксис
array PDO::errorInfo();
Возвращаемое значение
Массив сведений об ошибке для последней операции с дескриптором базы данных. Этот массив состоит из следующих полей:
Код ошибки SQLSTATE.
Код ошибки, относящийся к драйверу.
Сообщение об ошибке, относящееся к драйверу.
Если ошибка отсутствует или не задано SQLSTATE, то поля, относящиеся к драйверу, будут иметь значение NULL.
Замечания
PDO::errorInfo возвращает только сведения об ошибках для операций, выполненных непосредственно в базе данных. Используйте PDOStatement::errorInfo при создании экземпляра PDOStatement с помощью PDO::prepare или PDO::query.
Добавлена поддержка PDO версии 2.0 драйверов Майкрософт для PHP для SQL Server.
Пример
В этом примере неправильно указано имя столбца (Cityx вместо City), что вызывает ошибку, о которой затем сообщается.
<?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());
?>
Дополнительные сообщения ODBC
При возникновении исключения драйвер ODBC может вернуть несколько ошибок, которые помогают в диагностике проблем. Однако PDO::errorInfo всегда выдает только первую ошибку. В ответ на этот отчет об ошибке функции PDO::errorInfo и PDOStatement::errorInfo были обновлены: теперь драйверы должны выводить по крайней мере следующие три поля:
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.
Начиная с версии 5.9.0 функция PDO::errorInfo по умолчанию выводит дополнительные ошибки ODBC при их наличии. Например:
<?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);
}
?>
При выполнении приведенного выше скрипта должно было произойти исключение, и выходные данные должны выглядеть так:
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."
}
Если пользователь предпочитает прежнее поведение, отключить новое можно с помощью параметра конфигурации pdo_sqlsrv.report_additional_errors. Просто добавьте следующую строку в начало любого скрипта PHP:
ini_set('pdo_sqlsrv.report_additional_errors', 0);
В этом случае при выполнении того же примера скрипта будут показаны следующие сведения об ошибках:
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'."
}
При необходимости пользователь может добавить следующую строку в файл php.ini, чтобы отключить эту функцию во всех скриптах PHP:
pdo_sqlsrv.report_additional_errors = 0
Предупреждения и ошибки
Начиная с версии 5.9.0 предупреждения ODBC больше не будут регистрироваться как ошибки. То есть коды ошибок с префиксом 01 регистрируются как предупреждения. Иными словами, если вы хотите регистрировать только ошибки, измените файл php.ini следующим образом:
[pdo_sqlsrv]
pdo_sqlsrv.log_severity = 1
В этом случае в файле журнала не будет сообщений с предупреждениями. Ознакомьтесь с тем, как ведется журнал для пользователей pdo_sqlsrv.