Share via


パラメーターの方向を指定する方法

このトピックでは、ストアド プロシージャを呼び出すときに SQL Server Driver for PHP を使用してパラメータの方向を指定する方法について説明します。パラメータの方向は、sqlsrv_query または sqlsrv_prepare に渡されるパラメータ配列を構築する際 (手順 3.) に指定します。

パラメータの方向を指定するには

  1. ストアド プロシージャを呼び出す Transact-SQL クエリを定義します。ストアド プロシージャに渡されるパラメータの代わりに、疑問符 (?) を使用します。たとえば、次の文字列を使用すると、2 つのパラメータを受け取るストアド プロシージャ (UpdateVacationHours) が呼び出されます。

    $tsql = "{call UpdateVacationHours(?, ?)}";
    

    注意

    正規構文を使用してストアド プロシージャを呼び出すことをお勧めします。正規構文の詳細については、「ストアド プロシージャの呼び出し」を参照してください。

  2. Transact-SQL クエリ内のプレースホルダに対応する PHP 変数を初期化または更新します。たとえば、次のコードを使用すると、UpdateVacationHours ストアド プロシージャの 2 つのパラメータが初期化されます。

    $employeeId = 101;
    $usedVacationHours = 8;
    

    注意

    nullDateTime、またはストリームのいずれかの型に初期化または更新される変数を出力パラメータとして使用することはできません。

  3. 手順 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)
             );
      
  4. sqlsrv_query を使用するか、または sqlsrv_preparesqlsrv_execute の組み合わせを使用して、クエリを実行します。たとえば、次のコードを使用すると、$params で指定されたパラメータ値と接続 $conn を使用してクエリ $tsql が実行されます。

    sqlsrv_query($conn, $tsql, $params);
    

参照

処理手順

出力パラメーターを取得する方法
入出力パラメーターを取得する方法