方法:SQLSRV ドライバーを使用してエラーおよび警告処理を構成する
このトピックでは、エラーと警告を処理するために 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);
?>