You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP+MySQL显示学生列表时foreach循环重复执行10次以上问题求解

问题原因
  • 存在多余的嵌套foreach循环:通过$reponse->fetch()每次循环已经可以拿到单条完整的学生记录,不需要再遍历单条记录的字段数组
  • PDO默认的fetch模式为PDO::FETCH_BOTH,返回的数组同时包含数字索引和关联索引:你的eleves表共有5个字段,因此单条记录的$donnees数组会有10个元素(每个字段对应2种索引),foreach遍历10次就会输出10次完全相同的学生信息,和你遇到的重复现象完全吻合。
修复方案

直接去掉多余的foreach循环即可,修正后的代码如下:

<?php
/*try catch PDO*/
// 优化建议:只查询需要的字段,比SELECT *效率更高
$reponse = $bdd->query('SELECT nom, prenom FROM eleves');
?>
<ul> 
<?php 
    // 优化建议:指定fetch模式为PDO::FETCH_ASSOC,仅返回关联数组,节省内存
    while ($donnees = $reponse->fetch(PDO::FETCH_ASSOC)) {
        $name = $donnees["nom"];
        $surname = $donnees["prenom"];
?>
    <li>
        <a href="">
            <?= $surname . ' ' . $name ?>
        </a>
    </li>
<?php } ?>
</ul>
额外优化建议
  • 查询时避免使用SELECT *,明确指定需要查询的字段,减少不必要的数据传输和内存占用
  • 调用fetch()时显式指定返回模式,比如PDO::FETCH_ASSOC(仅关联数组)、PDO::FETCH_NUM(仅数字索引数组),避免默认模式带来的冗余数据

内容的提问来源于stack exchange,提问作者Eric Minel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.14 13:24:05