来自一个$ result的多个for循环= $ conn-> query($ query)

问题描述 投票:1回答:2

我已将数据导入到表中,现在使用如下代码通过PHP访问该数据,

<?php
require_once 'connect.php';

$query = "SELECT * FROM JunkData";
$result = $conn->query($query);

if(!$result) die("Fatal Error");

$rows = $result->num_rows;

for ($name = 0; $name < $rows; ++$name)
{
    $row = $result->fetch_array(MYSQLI_ASSOC);
    echo htmlspecialchars($row['Name']) . '<br/>';
}

$result->close();
$conn->close();

这有效!我真的很好奇,为什么除非添加$ result才添加第二个for循环不起作用?

<?php
require_once 'connect.php';

$query = "SELECT * FROM JunkData";
$result = $conn->query($query);

if(!$result) die("Fatal Error");

$rows = $result->num_rows;

for ($name = 0; $name < $rows; ++$name)
{
    $row = $result->fetch_array(MYSQLI_ASSOC);
    echo htmlspecialchars($row['Name']) . '<br/>';
}

for ($number = 0; $number < $rows; ++$number)
{
    $row = $result->fetch_array(MYSQLI_ASSOC);
    echo htmlspecialchars($row['Number']) . 'Flag<br/>';
}


$result->close();
$conn->close();

无效,尽管'Flag'被打印了适当的次数。而如果我再次声明$ result。

<?php
require_once 'connect.php';

$query = "SELECT * FROM JunkData";
$result = $conn->query($query);

if(!$result) die("Fatal Error");

$rows = $result->num_rows;

for ($name = 0; $name < $rows; ++$name)
{
    $row = $result->fetch_array(MYSQLI_ASSOC);
    echo htmlspecialchars($row['Name']) . '<br/>';
}

$result = $conn->query($query);

for ($number = 0; $number < $rows; ++$number)
{
    $row = $result->fetch_array(MYSQLI_ASSOC);
    echo htmlspecialchars($row['Number']) . '<br/>';
}


$result->close();
$conn->close();

该代码确实有效。我尝试用unset($ row)等取消设置一些变量,但我确实注意到是否删除了该行,

$row = $result->fetch_array(MYSQLI_ASSOC);

从第二个for循环开始,它将在Number列中输出最后一个值,该循环将运行循环的次数。

我希望这是可以理解的。我想知道如果想对它运行第二个for循环,我需要重新声明$ result的代码中发生了什么。

php for-loop mysqli
2个回答
0
投票

调用fetch_*函数时有一个内部指针。

在第一个for循环中,将指针发送到结果集的末尾。因此,下一个fetch将不返回任何内容。


1
投票

我建议的标准解决方案是执行fetch_all()

© www.soinside.com 2019 - 2024. All rights reserved.