使用sqlsvr_query执行返回结果集的存储过程


Executing a stored procedure that returns a result set using sqlsvr_query

我正试图写一个函数来获取数据从SQL Server 2008数据库,到目前为止的功能是:

function searchMovements($cd,$nm) {
    $usr = $_SESSION['username']."A";
    $hashedpass = $_SESSION['hashedpass'];
    $svr = $GLOBALS["svrName"];
    $db = $GLOBALS["dbName"];
    $retarray = NULL;

    $qry = "EXEC dbo.UDEF_DCAPP_GET_BOOKINGS @STKCODE = ?, @STKNAME = ?";
    // echo("set query to ".$qry."<br>");
    $connectionInfo = array( "Database"=>$db, "UID"=>$usr, "PWD"=>$hashedpass);
    $conn = sqlsrv_connect( $svr, $connectionInfo);
    if ($conn == false) {
        sqlsrv_close($conn);
        // echo("Failed to connect");
        die( print_r( sqlsrv_errors(), true));

    } else {
        $params = array($cd,$nm);
        $result = sqlsrv_query($conn, $qry,$params);
        var_dump($result);
        if($result == false) {
            sqlsrv_close($conn);
            echo("result empty");
            die( print_r( sqlsrv_errors(), true) );
        }
        while( $row = sqlsrv_fetch_array( $result, SQLSRV_FETCH_ASSOC) ) {
            $retarray[] = $row;
        }
        sqlsrv_close($conn);
        return $retarray;
    }

}

我真正有问题的部分是:

$params = array($cd,$nm);
$result = sqlsrv_query($conn, $qry,$params);
var_dump($result);
if($result == false) {
    sqlsrv_close($conn);
    echo("result empty");
    die( print_r( sqlsrv_errors(), true) );
}

此部分不断返回result empty

当我把$result变量改为var_dump时,我得到bool(false)

我已经尝试使用一个选择语句,这似乎工作得很好。我在SQL服务器上运行了一个跟踪,它运行以下查询:

exec sp_executesql N'EXEC dbo.UDEF_DCAPP_GET_BOOKINGS @STKCODE = @P1, @STKNAME = @P2',N'@P1 varchar(8),@P2 varchar(max)','TESTCODE',''

在SSMS中运行这行代码将返回我所期望的结果。

文档似乎建议这应该工作,但这是sqlsvr_qry功能的限制吗?我做错了什么吗?

几天后找到了答案,是权限问题。

当我在SSMS中运行脚本时,它是在admin权限下运行的,但PHP是作为用户运行的。