如何配置错误和警告处理

本主题介绍了如何配置 SQL Server Driver for PHP 以便处理错误和警告。

默认情况下,SQL Server Driver for PHP 将警告视为错误;如果调用会生成错误或警告的 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 will not 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);
?>

另请参见

概念

将活动记入日志

其他资源

编程指南
API 参考 (SQL Server Driver for PHP)