1

我正在从 MSSQL 数据库中检索几个表,然后运行这些表以从中获取订单信息。

我的代码如下所示:

    while($row = sqlsrv_fetch_array($orderResult))
    {
        ......code........
        ..................
        while($statusRow = sqlsrv_fetch_array($statusResult))
        {
            ....code....
        }
        ....code....
    }

现在我的问题是,在第二个循环运行之后,它就再也不会运行了。每次第一个循环运行时,我都需要它运行。

我可以做些什么来重置第二个循环以再次运行?

先感谢您。任何帮助或朝着正确方向的推动都会非常有帮助。

4

4 回答 4

2

阅读sqlsrv_fetch_array()中的其他参数

你可以做这样的事情来重置

// reset, and get first row
$row = sqlsrv_fetch_row($result, SQLSRV_FETCH_BOTH, SQLSRV_SCROLL_FIRST);

// get second (and nth row) normally
$row = sqlsrv_fetch_row($result);

或者,我认为您可以从JOIN在查询中执行 a 返回单个结果中受益。像这样手动合并结果似乎有点骇人听闻。

于 2012-05-09T21:31:26.943 回答
1

从返回多个结果集的数据库调用存储过程时,我遇到了类似的问题。我发现 Macek 的答案对我不起作用,但另一个答案确实有效:

$resultSet = array();
$isNotLastResult = true;
$i = 0;

while (!is_null($isNotLastResult))
{
    $resultSet[$i] = array();

    while ($row = sqlsrv_fetch_array($result, SQLSRV_FETCH_ASSOC))
    {
        $resultSet[$i][] = $row;
    }

    $isNotLastResult = sqlsrv_next_result($result);
    $i++;
}

print_r($resultSet);

PS:我给了你一个向上箭头来抵消你的向下箭头。你问了一个问题,我花了很多时间寻找答案。好问题!

于 2014-05-19T18:44:25.463 回答
1

使用以下命令重置指针:

sqlsrv_fetch_array ($Res, SQLSRV_FETCH_ASSOC, SQLSRV_SCROLL_ABSOLUTE, -1);

然后使用与之前相同的代码循环遍历结果集。sql_fetch_array 似乎在检索数据后递增指针。请求 -1 记录不会检索任何内容,但会将指针设置为 0,即第一条记录。

于 2015-07-02T00:55:41.433 回答
0

你确定你的第二个循环得到了第二次运行的结果吗?也许,如果你的 $statusResult 依赖于你的 $row 并且你的 $row 只有第一个循环的条目,你应该在你的数据库中插入一些伪条目。

第二个循环应该在下一个“大”循环中刷新自身,因为整个内部块将在大块的末尾被销毁,并将在下一个条目时(完全)重建。

于 2012-05-09T21:25:54.863 回答