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

使用PHP+while循环打印MySQL查询结果表时重复输出整表如何解决

问题根源说明

  • 关于fetch(PDO::FETCH_ASSOC):该方法每次调用会从结果集中取1行数据,存在数据时返回关联数组,结果集读完后返回false,你之前的理解有误。而且你在if判断前先调用了一次fetch,直接把第一条数据吃掉了,后续while循环会漏掉第一条记录。
  • 重复输出表格的原因:你把<table>标签和表头代码写在了while循环内部,每遍历一行数据就会输出一次完整的表格结构,自然出现多个表格。
  • 额外隐藏问题:你的SQL查询语句没有查询user_id字段,后续拼接编辑/删除链接时调用$row['user_id']会报错;另外删除链接的代码写错了,href="delete".php的点放在了引号外面,会导致HTML语法错误。

修正后代码

// 先判断登录状态
if (isset($_SESSION['success'])) {
    // 查询时加上user_id字段,后面编辑删除要用
    $stmt = $pdo->query("SELECT user_id, make, model, year, mileage from autos");
    // 一次性取出所有行存到数组里,方便判断有没有数据
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);
    
    if (count($rows) > 0) {
        // 表格和表头只输出一次,放在循环外面
        echo '<table border="1">'."\n";
        echo "<tr><td>Make</td><td>Model</td><td>Year</td><td>Mileage</td><td>Action</td></tr>";
        // 遍历行输出内容
        foreach ($rows as $row) {
            echo "<tr><td>";
            echo htmlentities($row['make']);
            echo "</td><td>";
            echo htmlentities($row['model']);
            echo "</td><td>";
            echo htmlentities($row['year']);
            echo "</td><td>";
            echo htmlentities($row['mileage']);
            echo "</td><td>";
            // 修正delete.php的引号错误
            echo '<a href="edit.php?user_id='.$row['user_id'].'">Edit</a> / <a href="delete.php?user_id='.$row['user_id'].'">Delete</a>';
            echo "</td></tr>";
        }
        echo "</table>";
    } else {
        echo "No rows found";
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:39:04