多次运行while($ row = sqlsrv_fetch_array($ result))

时间:2012-05-09 21:20:55

标签: php sql-server while-loop

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

我的代码如下所示:

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

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

我有什么办法可以重置第二个循环再次运行吗?

提前谢谢你。任何帮助或推动正确的方向都将非常有帮助。

4 个答案:

答案 0 :(得分: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以返回单个结果。像这样手动合并结果似乎有点hackish。

答案 1 :(得分:1)

从返回多个结果集的数据库调用存储过程时遇到了类似的问题。我发现马斯克的答案对我不起作用,但是another answer做了:

$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:我给了你一个向上箭头来抵消你的向下箭头。你问了一个我花了很多时间寻找答案的问题。好问题!

答案 2 :(得分:1)

使用以下命令重置指针:

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

然后使用与之前相同的代码循环遍历结果集。检索数据后,sql_fetch_array似乎会增加指针。请求-1记录什么都不检索,但然后将指针设置为0,这是第一条记录。

答案 3 :(得分:0)

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

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