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_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 錯誤碼>(英文)。 如果是源自於 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);
?>