如何指定参数方向

本主题介绍如何在调用存储过程时使用 SQL Server Driver for PHP 指定参数方向。请注意,在构建传递到 sqlsrv_querysqlsrv_prepare 的参数数组时(步骤 3)指定参数方向。

指定参数方向

  1. 定义调用存储过程的 Transact-SQL 查询。使用问号 (?)而不是传递给相应存储过程的参数。例如,此字符串用于调用接受两个参数的存储过程 (UpdateVacationHours):

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

    备注

    建议使用规范语法来调用存储过程。有关规范语法的详细信息,请参阅 Calling a Stored Procedure(调用存储过程)。

  2. 初始化或更新与此 Transact-SQL 查询中的占位符对应的 PHP 变量。例如,以下代码将初始化 UpdateVacationHours 存储过程的两个参数:

    $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_querysqlsrv_preparesqlsrv_execute 执行该查询。例如,以下代码使用连接 $conn 执行带有在 $params 中指定的参数值的 $tsql 查询:

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

另请参见

任务

如何检索输出参数
如何检索输入/输出参数