Php 一个$result=$conn->;中的多个for循环;查询($query)
我已经将数据导入到一个表中,现在使用PHP访问该数据,代码如下:Php 一个$result=$conn->;中的多个for循环;查询($query),php,for-loop,mysqli,Php,For Loop,Mysqli,我已经将数据导入到一个表中,现在使用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)
<?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();
从第二个for循环开始,它将按循环运行的次数打印Number列中的最后一个值
我希望这是可以理解的。我想知道代码中发生了什么,如果我想对它运行第二个for循环,我需要重新声明$result。我建议的标准解决方案是执行
fetch\u all()
而不是:
$rows = $result->num_rows;
for ($name = 0; $name < $rows; ++$name)
{
$row = $result->fetch_array(MYSQLI_ASSOC);
调用
fetch.*
函数时,会有一个内部指针
在第一个for
循环中,将指针发送到结果集的末尾。
因此,下一个fetch
将不返回任何内容
如果运行$result->data\u 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/>';
}
($name=0;$name<$rows;++$name)的
{
$row=$result->获取数组(MYSQLI\u ASSOC);
回显htmlspecialchars($row['Name'])。
;
}
$result->data\u seek(0)//获取数组(MYSQLI\u ASSOC);
echo htmlspecialchars($row['Number'])。'
;
}
当然,通常不需要两次循环相同的结果集,您可能需要重新考虑您的逻辑并只循环一次。为什么要两次运行相同的查询,每次只得到一列?您可以将这两个循环组合起来,只需在同一个for循环中获取两列?你让你自己变得更加困难,效率也更低,正如@AFriend所说,考虑到你使用的是完全相同的数据,为什么不把这两个
echo
放在同一个for
循环中呢?我确实理解这一推理,并且看到我在这里的编码方式过于复杂。这是一次尝试和理解代码的尝试,使用重复,这导致我在代码中发现了一个我看不出原因的问题。我在这里问过,得到了很好的回答@费利佩·杜阿尔特解释了一个我不知道的概念,我很感谢我在这里得到的帮助。的确,我将自己重新编写代码,但我已经了解了代码的作用。我建议将结果作为关联数组传递给MYSQLI_ASSOC。用户达曼已经添加了一条类似于我的注释作为注释。使用“$rows=$result->fetch_all(MYSQLI_ASSOC);”以关联数组的形式获取结果。谢谢你的回答,我以后可能会这样做。
$row = $result->fetch_array(MYSQLI_ASSOC);
$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)
{
...
}
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/>';
}