Share via


エラーおよび警告の処理を構成する方法

このトピックでは、エラーと警告が処理されるように 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)