隐藏

sqlsrv_errors

发布:2014/7/8 23:55:36作者:管理员 来源:本站 浏览次数:1823

返回关于上次执行的 sqlsrv 操作的扩展错误和/或警告信息。

通过使用在下文“参数”部分中指定的其中一个参数值调用 sqlsrv_errors 函数,可使该函数返回错误和/或警告信息。

默认情况下,调用任何 sqlsrv 函数时生成的警告都被视为错误;如果在调用 sqlsrv 函数时出现警告,则该函数将返回 false。但是,与 SQLSTATE 值 01000、01001、01003 和 01S02 对应的警告永远不会被视为错误。

下面这行代码禁用上述行为;通过调用 sqlsrv 函数生成的警告不会使该函数返回 false:

sqlsrv_configure("WarningsReturnAsErrors", 0);

下面这行代码重新启用默认行为;警告(以及上述异常)会被视为错误:

sqlsrv_configure("WarningsReturnAsErrors", 1);

不论设置如何,警告都只能通过使用 sqlsrv_errors 或 SQLSRV_ERR_ALL 参数值(有关详细信息,请参阅下文中的“参数”部分)调用 SQLSRV_ERR_WARNINGS 来检索。

sqlsrv_errors( [int $errorsAndOrWarnings] )

$errorsAndOrWarnings[可选]:一个预定义的常数。此参数可以取下表中列出的值之一:

说明

SQLSRV_ERR_ALL

返回上次调用 sqlsrv 函数时生成的错误和警告。

SQLSRV_ERR_ERRORS

返回上次调用 sqlsrv 函数时生成的错误。

SQLSRV_ERR_WARNINGS

返回上次调用 sqlsrv 函数时生成的警告。

如果没有提供任何参数值,则返回通过上次调用 sqlsrv 函数生成的错误和警告。

数组的 array 或 null。返回的 array 中的每个 array 均包含三个键值对。下表列出了每个键及其说明:

说明

SQLSTATE

对于来自 ODBC 驱动程序的错误,为 ODBC 返回的 SQLSTATE。有关 ODBC 的 SQLSTATE 值的信息,请参阅 ODBC Error Codes(ODBC 错误代码)。

对于来自 SQL Server Driver for PHP 的错误,SQLSTATE 为 IMSSP。

对于来自 SQL Server Driver for PHP 的警告,SQLSTATE 为 01SSP。

code

对于来自 SQL Server 的错误,为本机 SQL Server 错误代码。

对于来自 ODBC 驱动程序的错误,为 ODBC 返回的错误代码。

对于来自 SQL Server Driver for PHP 的错误,为 SQL Server Driver for PHP 错误代码。

message

对错误的说明。

也可以使用数字键 0、1 和 2 访问数组值。如果没有出现任何错误或警告,则返回 null

下面的示例显示在语句执行失败时出现的错误。(该语句失败的原因是 InvalidColumName 不是指定表中的有效列名)。此示例假定本地计算机上已安装 SQL Server 和AdventureWorks 数据库。从命令行运行此示例时,所有的输出都将写入控制台。

<?php
/* Connect to the local server using Windows Authentication and 
specify the AdventureWorks database as the database in use. */
$serverName = "(local)";
$connectionInfo = array( "Database"=>"AdventureWorks");
$conn = sqlsrv_connect( $serverName, $connectionInfo);
if( $conn === false )
{
     echo "Could not connect.\n";
     die( print_r( sqlsrv_errors(), true));
}

/* Set up a query to select an invalid column name. */
$tsql = "SELECT InvalidColumnName FROM Sales.SalesOrderDetail";

/* Attempt execution. */
/* Execution will fail because of the invalid column name. */
$stmt = sqlsrv_query( $conn, $tsql);
if( $stmt === false )
{
      if( ($errors = sqlsrv_errors() ) != null)
      {
         foreach( $errors as $error)
         {
            echo "SQLSTATE: ".$error[ 'SQLSTATE']."\n";
            echo "code: ".$error[ 'code']."\n";
            echo "message: ".$error[ 'message']."\n";
         }
      }
}

/* Free connection resources */
sqlsrv_close( $conn);
?>