2016-09-28 86 views
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 

回答

0

在這個msdn link還有另一種方式來分配你的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 

更緊湊一點..

+0

呃,奇怪,我想我讀了一些關於使用'&'的地方。我只是嘗試了你所說的,沒有任何東西。我設法通過在SP中添加SELECT子句並獲取結果來完成此操作。然而,這只是一種替代方法,因此不是在這一點上的答案 –

+0

@NicolasPaz,請嘗試在第一個查詢中分配「@idExamen」,以便它更緊湊..請參閱我的文章更新 –