2 回答
TA贡献1830条经验 获得超9个赞
我推荐的标准解决方案是fetch_all()
代替:
$rows = $result->num_rows;
for ($name = 0; $name < $rows; ++$name)
{
$row = $result->fetch_array(MYSQLI_ASSOC);
做
$rows = $result->fetch_all();
foreach ($rows as $row)
{
...
}
// then you can re-loop same array of $rows
foreach ($rows as $row)
{
...
}
TA贡献1898条经验 获得超8个赞
fetch_*调用函数时有一个内部指针。
在您的第一个for循环中,您将指针发送到结果集的末尾。因此,下一个fetch将不返回任何内容。
如果您运行$result->data_seek(0),您将重置此指针并可以重用:
for ($name = 0; $name < $rows; ++$name)
{
$row = $result->fetch_array(MYSQLI_ASSOC);
echo htmlspecialchars($row['Name']) . '<br/>';
}
$result->data_seek(0); //<---- REPLACE HERE
for ($number = 0; $number < $rows; ++$number)
{
$row = $result->fetch_array(MYSQLI_ASSOC);
echo htmlspecialchars($row['Number']) . '<br/>';
}
当然,通常不需要循环两次相同的结果集,您可能需要重新考虑您的逻辑并只循环一次。
- 2 回答
- 0 关注
- 227 浏览
添加回答
举报
