使用相同的SELECT重复WHILE

时间:2019-03-15 11:35:15

标签: php mysql mysqli

为什么我不能两次使用相同的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()); ?>

谢谢。

3 个答案:

答案 0 :(得分:3)

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

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

//在需要的地方循环
foreach($ result为$ r){
    //使用$ r
}

//再次循环结果!
foreach($ result为$ r){
    //使用$ r
}
 

还建议您使用准备好的语句,而不要使用直接查询中插入变量的语句。

答案 1 :(得分: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()); ?>

答案 2 :(得分:1)

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

因此,第二个循环没有任何消耗。

您可以做的是:

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

第二次使用。

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

您应该始终倾向于减少PHP和MySQL服务器的访问次数。