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

PHP PDO输出MySQL数据到HTML表格仅显示表头问题排查

PDO查询数据不展示修复方案

核心问题点

你的代码存在4处导致数据不显示的错误,按影响优先级排序:

  1. 进入查询判断后残留了错误代码echo $result["PC"];:$result是PDOStatement对象,不是数组,直接访问数组键会触发致命错误,直接中断后续代码执行,这是你修改循环写法后仍然无输出的核心原因
  2. PDO连接时未指定字符集参数,部分环境下会出现查询返回空、乱码甚至报错
  3. 初始循环写法while ($row = $result)完全错误:该写法不会从结果集中读取任何行,且会造成死循环
  4. 输出表格行后未闭合</table>标签,不符合HTML规范,可能导致浏览器渲染时丢弃异常的表格内容

修正后完整代码

数据库连接段(替换原有连接逻辑)

// 替换为你实际的数据库配置
$host = '127.0.0.1';
$username = '你的数据库账号';
$password = '你的数据库密码';

try 
{
    // 连接时必须指定charset=utf8mb4,兼容全量字符集,避免查询异常
    $conn = new PDO("mysql:host=$host;dbname=judges;charset=utf8mb4", $username, $password);
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $conn->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
}
catch(PDOException $e)
{
    die("数据库连接失败: " . $e->getMessage());
}

查询渲染表格段(替换原有业务逻辑)

$query = "SELECT * FROM feedback";

// 输出表格表头
echo '<table border="0" cellspacing="2" cellpadding="2"> 
      <tr> 
          <td><font face="Arial">Judge Name</font></td> 
          <td><font face="Arial">PC</font></td> 
          <td><font face="Arial">TD</font></td> 
          <td><font face="Arial">EX</font></td> 
          <td><font face="Arial">ID</font></td> 
          <td><font face="Arial">comment</font></td>
      </tr>';

try {
    $result = $conn->query($query);
    // 正确遍历结果集,逐行读取关联数组
    while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
        echo '<tr> 
                  <td>'.$row["judgeName"].'</td> 
                  <td>'.$row["PC"].'</td> 
                  <td>'.$row["TD"].'</td> 
                  <td>'.$row["EX"].'</td> 
                  <td>'.$row["ID"].'</td> 
                  <td>'.$row["comment"].'</td> 
              </tr>';
    }
} catch (PDOException $e) {
    echo '<tr><td colspan="6">查询异常:'.$e->getMessage().'</td></tr>';
}

// 闭合表格标签
echo '</table>';

排查验证步骤

如果替换代码后仍无数据,按顺序检查:

  • 确认数据库账号拥有judges库feedback表的SELECT查询权限
  • 在查询代码前加入var_dump($conn->query("SELECT COUNT(*) FROM feedback")->fetchColumn());,打印实际查询到的行数:如果返回0,说明你当前连接的数据库实例/库名和你存存量数据的不是同一个
  • 开发阶段将php.ini中display_errors设为On,错误级别设置为E_ALL,可以直接看到具体报错位置,无需盲查

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 11:57:13