未从使用 PHP 的存储过程 MSSQL DB 接收结果


嗨,我

有一个问题,我没有从存储过程收到结果,我使用 php 和 mssql 数据库。

我可以在 sql 服务器探查器中看到该查询,当我在 sql Server 管理工具中运行该查询时,该查询将正常工作。

当我在 php 中使用查询时,出现以下错误

Array ( [0] => Array ( [0] => IMSSP [SQLSTATE] => IMSSP [1] => -28 [code] => -28 [2] => The active result for the query contains no fields. [message] => The active result for the query contains no fields. ))

这是我的 php 代码 'if ($this->conn) {

        $session_id = "9999912C8D74";
        $patient_id = "9999912C8D74";
        $days = 7;
        $params = array (
                array (
                        $session_id,
                        SQLSRV_PARAM_IN 
                ),
                array (
                        $patient_id,
                        SQLSRV_PARAM_IN 
                ),
                array (
                        $days,
                        SQLSRV_PARAM_IN 
                ) 
        );
        $tsql_callSP = "exec dbo.STOREDPROCEDURECALL @SessId=?, @PatId=?, @days=?";
        $stmt3 = sqlsrv_query ( $this->conn, $tsql_callSP, $params );
        if ($stmt3 === false) 
        {
            echo "Error in executing statement 3.n";
            die ( print_r ( sqlsrv_errors (), true ) );
        }
        if( sqlsrv_fetch( $stmt3 ) === false) 
        {
            die( print_r( sqlsrv_errors(), true));
        }
        $name = sqlsrv_get_field( $stmt3, 1);
        echo "$name: ";
        $comment = sqlsrv_get_field( $stmt3, 2);
        echo $comment;
        while ( $obj = sqlsrv_fetch_object ( $stmt3 ) ) {
            var_dump ( $obj );
            echo $obj->BGUM . "<br>";
        }
    }

我已经在堆栈溢出上尝试了大量的解决方案,没有任何效果:-(,任何建议将不胜感激。谢谢。

毕竟,答案是在 SP 中添加SET NOCOUNT ON;

删除此部分:

if( sqlsrv_fetch( $stmt3 ) === false) 
    {
        die( print_r( sqlsrv_errors(), true));
    }
    $name = sqlsrv_get_field( $stmt3, 1);
    echo "$name: ";
    $comment = sqlsrv_get_field( $stmt3, 2);
    echo $comment;
    while ( $obj = sqlsrv_fetch_object ( $stmt3 ) ) {
        var_dump ( $obj );
        echo $obj->BGUM . "<br>";
    }

并在sqlsrv_fetch_array的帮助下像这样更改它(阅读此处):

while ($obj = sqlsrv_fetch_array($stmt3, SQLSRV_FETCH_NUMERIC)) {
    echo $obj[0]." ".$obj[1]."<br>"; //I don't know how many columns your SP return
}
sqlsrv_free_stmt( $stmt3);

或者您可以使用列名获取:

while ($obj = sqlsrv_fetch_array($stmt3, SQLSRV_FETCH_ASSOC)) {
    echo $obj['name']." ".$obj['comment']."<br>"; 
}
sqlsrv_free_stmt( $stmt3);

最新更新