如何:使用 SQLSRV 驅動程式設定錯誤和警告處理

下載 PHP 驅動程式

本主題說明如何設定 SQLSRV 驅動程式,以處理錯誤和警告。

根據預設,SQLSRV 驅動程式會將警告視為錯誤;呼叫 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 is 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);  
?>  

另請參閱

記錄活動

Microsoft Drivers for PHP for SQL Server 的程式設計指南

SQLSRV 驅動程式 API 參考