0
对不起,我的英文很差。这里的问题是:我试图通过sqlsrv驱动程序,SP和输出参数从sql server express 2014中的表中获取PHP中的ID。在使用sqlsrv(PHP)的SP中输出参数遇到问题
当我执行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
编辑:发现一个替代方式来做我想做的事情,用一个SELECT插件理想的SP。然后我就取德结果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
呃,奇怪,我想我读了一些关于使用'&'的地方。我只是尝试了你所说的,没有任何东西。我设法通过在SP中添加SELECT子句并获取结果来完成此操作。然而,这只是一种替代方法,因此不是在这一点上的答案 –
@NicolasPaz,请尝试在第一个查询中分配“@idExamen”,以便它更紧凑..请参阅我的文章更新 –