方法:SQLSRV ドライバーを使用してパラメーターの方向を指定する
このトピックでは、ストアド プロシージャを呼び出す際に、SQLSRV ドライバーを使用して、パラメーターの方向を指定する方法について説明します。 パラメーターの方向は、sqlsrv_query または sqlsrv_prepare に渡されるパラメーター配列を構築する (手順 3) ときに指定します。
パラメーターの方向を指定するには
ストアド プロシージャを呼び出す TRANSACT-SQL クエリを定義します。 ストアド プロシージャに渡されるパラメーターの代わりに疑問符 (?) を使用します。 たとえば、この文字列は、2 つのパラメーターを受け付けるストアド プロシージャ (UpdateVacationHours) を呼び出します。
$tsql = "{call UpdateVacationHours(?, ?)}";
Note
正規の構文を使用してストアド プロシージャを呼び出すことをお勧めします。 正規の構文の詳細については、「ストアド プロシージャの呼び出し」を参照してください。
Transact-SQL クエリ内のプレースホルダーに対応する PHP 変数を初期化または更新します。 たとえば、次のコードは、UpdateVacationHours ストアド プロシージャの 2 つのパラメーターを初期化します。
$employeeId = 101; $usedVacationHours = 8;
Note
null、 DateTime、またはストリーム型に初期化または更新される変数は出力パラメーターとして使用できません。
手順 2 からの PHP 変数を使用して、Transact-SQL 文字列内のパラメーター プレースホルダーに順番に対応するパラメーター値の配列を作成または更新します。 配列に各パラメーターの方向を指定します。 各パラメーターの方向は、既定 (入力パラメーターの場合)、または SQLSRV_PARAM_* 定数 (出力および双方向パラメーターの場合) の使用の 2 つの方法のいずれかで決定されます。 たとえば、次のコードは、入力パラメーターとして $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 でクエリを実行します。 たとえば、次のコードは接続 $conn を使用して、 $params に指定されたパラメーター値でクエリ $tsqlを実行します。
sqlsrv_query($conn, $tsql, $params);