Практическое руководство. Настройка обработки ошибок и предупреждений с помощью драйвера SQLSRV
Эта статья описывает настройку драйвера SQLSRV для обработки ошибок и предупреждений.
По умолчанию драйвер SQLSRV рассматривает предупреждения как ошибки. Вызов функции sqlsrv, создающий ошибку или предупреждение, возвращает значение false. Чтобы отключить такое поведение, используйте функцию sqlsrv_configure. Если включить следующую строку кода в начало скрипта, функция sqlsrv, которая создает только предупреждения (без ошибок), не возвращает значение false:
sqlsrv_configure("WarningsReturnAsErrors", 0);
Следующая строка кода выполняет возврат к поведению по умолчанию (предупреждения обрабатываются как ошибки):
sqlsrv_configure("WarningsReturnAsErrors", 1);
Примечание.
Предупреждения, которые соответствуют значениям SQLSTATE 01000, 01001, 01003 и 01S02, никогда не обрабатываются как ошибки. Независимо от конфигурации функция sqlsrv , которая создает только предупреждения, соответствующие одному из этих состояний, не возвращает значение false.
Значение для WarningsReturnAsErrors также можно задать в файле php.ini. Например, эта запись в разделе [sqlsrv]
файла php.ini отключает поведение по умолчанию.
sqlsrv.WarningsReturnAsErrors = 0
Сведения об извлечении сведений об ошибках и предупреждениях см. в статьях sqlsrv_errors и Практическое руководство. Обработка ошибок и предупреждений.
Пример
Следующий пример кода показывает, как отключить поведение обработки ошибок по умолчанию. Пример использует команду PRINT языка Transact-SQL для создания предупреждения. Дополнительные сведения о команде PRINT см. в статье PRINT (Transact-SQL).
Сначала пример демонстрирует поведение обработки ошибок по умолчанию путем выполнения запроса, создающего предупреждение. Это предупреждение считается ошибкой. После изменения конфигурации обработки ошибок выполняется тот же самый запрос. Предупреждение не считается ошибкой.
В примере предполагается, что SQL Server установлен на локальном компьютере. При выполнении примера из командной строки все выходные данные выводятся в консоль.
<?php
/* Connect to the local server using Windows Authentication. */
$serverName = "(local)";
$conn = sqlsrv_connect( $serverName );
if( $conn === false )
{
echo "Could not connect.\n";
die( print_r( sqlsrv_errors(), true));
}
/* The Transact-SQL PRINT statement can be used to return
informational or warning messages*/
$tsql = "PRINT 'The PRINT statement can be used ";
$tsql .= "to return user-defined warnings.'";
/* Execute the query and print any errors. */
$stmt1 = sqlsrv_query( $conn, $tsql);
if($stmt1 === false)
{
echo "By default, warnings are treated as errors:\n";
/* Dump errors in the error collection. */
print_r(sqlsrv_errors(SQLSRV_ERR_ERRORS));
}
/* Disable warnings as errors behavior. */
sqlsrv_configure("WarningsReturnAsErrors", 0);
/* Execute the same query and print any errors. */
$stmt2 = sqlsrv_query( $conn, $tsql);
if($stmt2 === false)
{
/* Dump errors in the error collection. */
/* Since the warning generated by the query is be treated as
an error, this block of code will not be executed. */
print_r(sqlsrv_errors(SQLSRV_ERR_ERRORS));
}
else
{
echo "After calling ";
echo "sqlsrv_configure('WarningsReturnAsErrors', 0), ";
echo "warnings are not treated as errors.";
}
/*Close the connection. */
sqlsrv_close($conn);
?>
См. также
Руководство по программированию драйверов Microsoft для PHP для SQL Server