パラメーターの方向を指定する方法
このトピックでは、ストアド プロシージャを呼び出すときに SQL Server Driver for PHP を使用してパラメータの方向を指定する方法について説明します。パラメータの方向は、sqlsrv_query または sqlsrv_prepare に渡されるパラメータ配列を構築する際 (手順 3.) に指定します。
パラメータの方向を指定するには
ストアド プロシージャを呼び出す Transact-SQL クエリを定義します。ストアド プロシージャに渡されるパラメータの代わりに、疑問符 (?) を使用します。たとえば、次の文字列を使用すると、2 つのパラメータを受け取るストアド プロシージャ (UpdateVacationHours) が呼び出されます。
$tsql = "{call UpdateVacationHours(?, ?)}";
注意
正規構文を使用してストアド プロシージャを呼び出すことをお勧めします。正規構文の詳細については、「ストアド プロシージャの呼び出し」を参照してください。
Transact-SQL クエリ内のプレースホルダに対応する PHP 変数を初期化または更新します。たとえば、次のコードを使用すると、UpdateVacationHours ストアド プロシージャの 2 つのパラメータが初期化されます。
$employeeId = 101; $usedVacationHours = 8;
注意
null、DateTime、またはストリームのいずれかの型に初期化または更新される変数を出力パラメータとして使用することはできません。
手順 2. の PHP 変数を使用して、Transact-SQL 文字列内のパラメータ プレースホルダに順番に対応するパラメータ値の配列を作成または更新します。配列内のパラメータごとに方向を指定します。各パラメータの方向は、既定で決定されるか (入力パラメータの場合)、SQLSRV_PARAM_* 定数を使用して決定されます (出力パラメータと双方向パラメータの場合)。たとえば、次のコードを使用すると、$employeeId パラメータが入力パラメータとして指定され、$usedVacationHours パラメータが双方向パラメータとして指定されます。
$params = array( array($employeeId, SQLSRV_PARAM_IN), array($usedVacationHours, SQLSRV_PARAM_INOUT) );
パラメータの方向を指定する一般的な構文について説明するために、$var1、$var2、および $var3 がそれぞれ入力パラメータ、出力パラメータ、および双方向パラメータに対応すると想定します。パラメータの方向は、次のいずれかの方法で指定できます。
入力パラメータを暗黙的に指定し、出力パラメータと双方向パラメータを明示的に指定します。
array( array($var1), array($var2, SQLSRV_PARAM_OUT), array($var3, SQLSRV_PARAM_INOUT) );
入力パラメータ、出力パラメータ、および双方向パラメータをすべて明示的に指定します。
array( array($var1, SQLSRV_PARAM_IN), array($var2, SQLSRV_PARAM_OUT), array($var3, SQLSRV_PARAM_INOUT) );
sqlsrv_query を使用するか、または sqlsrv_prepare と sqlsrv_execute の組み合わせを使用して、クエリを実行します。たとえば、次のコードを使用すると、$params で指定されたパラメータ値と接続 $conn を使用してクエリ $tsql が実行されます。
sqlsrv_query($conn, $tsql, $params);