PHP:我无法使用reset()来处理我的嵌套MySQLi数据集

时间:2016-10-28 21:08:53

标签: php mysqli while-loop

看起来这应该是非常直接的,所以我觉得我错过了一些简单的东西。我运行两个单独的查询,并将它们分配给一个关联数组变量。查询运行正常,数据就在那里。我试图使用while循环遍历其他数据集中的一个数据集。它第一次运行正常,但我无法重置嵌套数据集,所以我可以再次遍历它。在下面看到的代码和结果中,您可以看到数据确实存在,因为它被条件IF语句跳过。另外,如果我将嵌套查询从升序更改为降序,我会获得第二组数据而不是第一组数据(在创建和测试时,我在第一个查询中只有两个数据点)。

似乎reset()函数应该执行我正在寻找的东西,但它没有完成任何事情。我希望我错过了一些非常简单的事情。

我甚至尝试将$ rowDate数组设置为空数组,并在While循环之前和之后设置NULL以强制它重新获取数据,但这也没有做任何事情。

代码段:

    $studSet = mysqli_query($connection, $queryStud);
    confirmQuery($studSet);

    $dateSet = mysqli_query($connection, $queryDate);
    confirmQuery($dateSet);

    while ($rowStud = mysqli_fetch_assoc($studSet)) {
        $studID = $rowStud['ID'];
        $sFName = $rowStud['FName'];
        $sLName = $rowStud['LName'];
        $output .= "<p>" . $sFName . " " . $sLName;
        while ($rowDate = mysqli_fetch_assoc($dateSet)) {
            $output .= "<br />" . current($rowDate) . "&nbsp;&nbsp;&nbsp;"; //here strictly for debugging
            if ($studID == $rowDate['studentID']) {
                $output .= $rowDate['timeStamp'];
            }
        }
        reset($rowDate);
        $output .= "</p>";
        $output .= "current " . current($rowDate) . " element"; //here strictly for debugging
    }

    return $output;

结果:

CodeResult

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

是的,你在这里缺少两个关键点:

1)你试图在记录上使用reset(),这没有意义,如果你试图重置()$ dateSet这是查询结果,我会更好理解。

2)$ dateSet不是常规数组,而是MySQLi资源,这意味着您不能在其上使用常规PHP数组函数。你使用mysqli_fetch_assoc()来提取一行,你使用mysqli_data_seek()获得与reset()相同的效果,所以你的代码是:

mysqli_data_seek($dateSet, 0);

(取代了reset()调用)