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
相关产品推荐
相关产品推荐

