如何指定参数方向
本主题介绍如何在调用存储过程时使用 SQL Server Driver for PHP 指定参数方向。请注意,在构建传递到 sqlsrv_query 或 sqlsrv_prepare 的参数数组时(步骤 3)指定参数方向。
指定参数方向
定义调用存储过程的 Transact-SQL 查询。使用问号 (?)而不是传递给相应存储过程的参数。例如,此字符串用于调用接受两个参数的存储过程 (UpdateVacationHours):
$tsql = "{call UpdateVacationHours(?, ?)}";
备注
建议使用规范语法来调用存储过程。有关规范语法的详细信息,请参阅 Calling a Stored Procedure(调用存储过程)。
初始化或更新与此 Transact-SQL 查询中的占位符对应的 PHP 变量。例如,以下代码将初始化 UpdateVacationHours 存储过程的两个参数:
$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 执行该查询。例如,以下代码使用连接 $conn 执行带有在 $params 中指定的参数值的 $tsql 查询:
sqlsrv_query($conn, $tsql, $params);