我正在从MSSQL数据库中检索几个表,然后我运行这些表来获取订单信息。
我的代码如下所示:
while($row = sqlsrv_fetch_array($orderResult))
{
......code........
..................
while($statusRow = sqlsrv_fetch_array($statusResult))
{
....code....
}
....code....
}
现在我的问题是,在第二个循环运行后,它永远不会再次运行。每次第一次循环运行时我都需要它运行。
我有什么办法可以重置第二个循环再次运行吗?
提前谢谢你。任何帮助或推动正确的方向都将非常有帮助。
答案 0 :(得分:2)
您可以执行以下操作重置
// 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只有第一个循环的条目,你应该在你的数据库中插入一些伪条目。
第二个循环应该在下一个“大”循环中刷新自身,因为整个内部块将在大块的末尾被销毁,并且将在下一个条目处(完全)重建。