使用相同的SELECT重复WHILE

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

为什么我不能两次使用相同的while

我想在页面上重复同样的事情而我不能,只需加载第一个。

例:

$rs = $mysqli->query("SELECT * FROM site WHERE id = '".$cliente."' ");
$row = $rs->fetch_assoc();

1(位于网站顶部)

<?php do{ ?>
    <option value="<?php echo $ID; ?>">
        <?php echo $nome; ?>
    </option>
<?php } while ($row = $rs->fetch_assoc()); ?>

而2(位于网站的末尾)

<?php do{ ?>
    <option value="<?php echo $ID; ?>">
        <?php echo $nome; ?>
    </option>
<?php } while ($row = $rs->fetch_assoc()); ?>

谢谢。

php mysql mysqli
3个回答
3
投票

将结果存储在数组中,然后在需要的地方循环。否则,您需要在重新循环之前重置结果的光标。

$query = $mysqli->query("SELECT * FROM site WHERE id = '".$cliente."' ");
$result = $query->fetch_all(MYSQLI_ASSOC);

// Loop wherever needed
foreach ($result as $r) {
    // Use $r
}

// Loop the result again!
foreach ($result as $r) {
    // Use $r
}

还建议您使用预准备语句,而不是使用注入变量的直接查询。


2
投票

当你执行$rs->fetch_assoc()时,你要从结果数组中提取行,要在多次使用该条件时再次通过再次执行查询再次弹出$rs,或者我建议将结果保存到另一个变量并随时使用它这个

$result = $mysqli->query("SELECT * FROM site WHERE id = '".$cliente."' ");
$rs = $result;
$row = $rs->fetch_assoc();

//WHILE 1
<?php do{ ?>
<option value="<?php echo $ID; ?>">
      <?php echo $nome; ?>
</option>
<?php } while ($row = $rs->fetch_assoc()); ?>
//$rs is empty now

$rs = $result; //setting $rs again
//WHILE 2
    <?php do{ ?>
    <option value="<?php echo $ID; ?>">
          <?php echo $nome; ?>
    </option>
    <?php } while ($row = $rs->fetch_assoc()); ?>

1
投票

第一个循环消耗了MySQL中的所有数据。

所以,第二个循环没有任何消耗。

你能做的是:

从一个数组中获取第一个循环中的所有数据。

第二次使用它。

此外,您正在增加PHP和MySQL之间的服务器访问。

你应该总是倾向于减少PHP和MySQL服务器的访问。

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