Извините за мой плохой английский. Вот проблема: я пытаюсь получить идентификатор в PHP из таблицы в SQL Server Express 2014 через драйвер sqlsrv, SP и выходной параметр.
Когда я выполняю де SP и печатаю выходной параметр через SSMS, все работает просто отлично. Однако, когда я вызываю SP из PHP, 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
В этот MSDN ссылка есть другой способ назначить ваш php $params
массив. Я пытаюсь адаптировать эту форму к вашему случаю:
$params = array(
array($idExamen, SQLSRV_PARAM_OUT)
);
Кажется, что не нужно применять оператор ссылки (я думаю) к выходной переменной при ее передаче, и другие константы php, связанные с параметром ..
обновить после комментария
попробуйте также
SELECT TOP 1 @IdExamen = T.IdExamen FROM TURNOS T WHERE T.Estado = 0 ORDER BY T.FechaHora ASC
это немного более компактно ..
Других решений пока нет …