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

使用FOREACH循环遍历PDO查询结果出现重复数据问题求助

解决PDO查询结果重复输出的问题

嗨,我一眼就看出问题出在哪啦!你用了PDO::FETCH_BOTH作为fetch的参数,这个模式会把每一行数据同时以索引数组(数字键)和关联数组(字段名键)两种格式返回。所以你的foreach($row as $k)会把每个字段的值输出两次——一次对应数字索引,一次对应字段名,这就是结果重复的原因。

给你两个简单的解决方案:

  • 方案一:更换fetch模式(推荐)
    直接把PDO::FETCH_BOTH换成PDO::FETCH_ASSOC(只返回关联数组,用字段名当键)或者PDO::FETCH_NUM(只返回索引数组,用数字当键),这样foreach就只会遍历一次每个字段的值了。修改后的代码如下:
<?php while($row=$stmt_header->fetch(PDO::FETCH_ASSOC)) { ?>
<tr class="odd gradeA">
  <form action='semesters.php' method='post'>
    <?php foreach($row as $value) { echo '<td>'. $value . '</td>'; } ?>
  </form>
</tr>
<?php } ?>
  • 方案二:保留FETCH_BOTH,过滤重复项
    如果你因为某些原因必须用FETCH_BOTH,可以在foreach里判断键的类型,只处理其中一种类型的键(比如只处理字符串类型的字段名键):
<?php while($row=$stmt_header->fetch(PDO::FETCH_BOTH)) { ?>
<tr class="odd gradeA">
  <form action='semesters.php' method='post'>
    <?php 
    foreach($row as $key => $value) {
        // 只处理关联数组的字符串键,跳过数字索引
        if(is_string($key)){
            echo '<td>'. $value . '</td>';
        }
    }
    ?>
  </form>
</tr>
<?php } ?>

另外提个小建议:HTML规范里<tr>的直接子元素应该是<td>,你现在把<form>放在<tr>里面虽然浏览器能兼容,但更规范的做法是把表单放到<td>内部,或者给每个需要提交的按钮单独绑定表单哦~

内容的提问来源于stack exchange,提问作者Manzu Gerald

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:15:30