如何:使用 SQLSRV 驱动程序配置错误和警告处理

下载 PHP 驱动程序

本主题介绍如何配置 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 文件中设置。 例如,php.ini 文件的 [sqlsrv] 部分中的此项目将关闭默认行为。

sqlsrv.WarningsReturnAsErrors = 0

有关检索错误和警告信息的信息,请参阅 sqlsrv_errors如何:处理错误和警告

示例

以下代码示例演示如何禁用默认错误处理行为。 该示例使用 Transact-SQL PRINT 命令生成警告。 有关 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 Drivers for PHP for SQL Server 编程指南

SQLSRV 驱动程序 API 参考