对不起我糟糕的英语。这是问题所在:我正在尝试通过 sqlsrv 驱动程序、SP 和输出参数从 sql server express 2014 中的表中接收 PHP 中的 ID。
当我执行 de SP 并通过 SSMS 打印输出参数时,一切正常。但是,当我从 PHP 调用 SP 时,会执行 SP,但输出参数不会改变。
这是SP:
ALTER PROCEDURE [dbo].[SiguientePaciente](
@IdExamen int OUTPUT
) AS
BEGIN
SET NOCOUNT ON
SET @IdExamen = (SELECT TOP 1 T.IdExamen FROM TURNOS T WHERE T.Estado = 0 ORDER BY T.FechaHora ASC)
UPDATE TURNOS SET Estado = 1 WHERE IdExamen = @IdExamen
RETURN
END
这是 PHP,假设$conexion
有效:
$idExamen = 0;
$sql = "{CALL SiguientePaciente (?)}";
$params = [&$idExamen, SQLSRV_PARAM_OUT, SQLSRV_PHPTYPE_INT, SQLSRV_SQLTYPE_INT];
$stmt = sqlsrv_query($conexion, $sql, $params);
if($stmt !== false){
//sqlsrv_next_result($stmt);
echo $idExamen;
}
else
echo print_r(sqlsrv_errors(), true);
最后,echo $idExamen
打印0
编辑:找到了另一种方法来做我想做的事,在 SP 中使用 SELECT。然后我只是在 PHP 中获取结果
ALTER PROCEDURE [dbo].[SiguientePaciente](
@IdExamen int OUTPUT
) AS
BEGIN
SET NOCOUNT ON
SET @IdExamen = (SELECT TOP 1 T.IdExamen FROM TURNOS T WHERE T.Estado = 0 ORDER BY T.FechaHora ASC)
UPDATE TURNOS SET Estado = 1 WHERE IdExamen = @IdExamen
SELECT @IdExamen AS IdExamen
RETURN;
END