共用方式為


如何:設定錯誤和警告的處理

本主題描述如何設定 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)