共用方式為


sqlsrv_errors

傳回有關上次執行之 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_ALLSQLSRV_ERR_WARNINGS 參數值,請參閱底下的「參數」一節,取得詳細資料) 來擷取警告。

語法

sqlsrv_errors( [int $errorsAndOrWarnings] )

參數

$errorsAndOrWarnings [選擇性]:預先定義的常數。這個參數可以接受下表列出的其中一個值:

描述

SQLSRV_ERR_ALL

將會傳回最後一個 sqlsrv 函數呼叫上所產生的錯誤和警告。

SQLSRV_ERR_ERRORS

將會傳回最後一個 sqlsrv 函數呼叫上所產生的錯誤。

SQLSRV_ERR_WARNINGS

將會傳回最後一個 sqlsrv 函數呼叫上所產生的警告。

如果未提供任何參數值,將會傳回最後一個 sqlsrv 函數呼叫所產生的錯誤和警告。

傳回值

陣列的 arraynull。傳回之 array 中的每一個 array 都包含三對索引鍵-值。下表列出每個索引鍵及其描述:

索引鍵 描述

SQLSTATE

如果是源自於 ODBC 驅動程式的錯誤,則為 ODBC 傳回的 SQLSTATE。如需有關 ODBC 之 SQLSTATE 值的詳細資訊,請參閱<ODBC 錯誤碼>(英文)。

如果是源自於 SQL Server Driver for PHP 的錯誤,則為 IMSSP 的 SQLSTATE。

如果是源自於 SQL Server Driver for PHP 的警告,則為 01SSP 的 SQLSTATE。

程式碼

如果是源自於 SQL Server 的錯誤,則為原生 SQL Server 錯誤碼。

如果是源自於 ODBC 驅動程式的錯誤,則為 ODBC 傳回的錯誤碼。

如果是源自 SQL Server Driver for PHP 的錯誤,則為 SQL Server Driver for PHP 錯誤碼。

訊息

錯誤的描述。

也可以使用數值索引鍵 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);
?>

另請參閱

概念

有關文件集中的程式碼範例

其他資源

API 參考 (SQL Server Driver for PHP)