PHP PDO输出MySQL数据到HTML表格仅显示表头问题排查
PDO查询数据不展示修复方案
核心问题点
你的代码存在4处导致数据不显示的错误,按影响优先级排序:
- 进入查询判断后残留了错误代码
echo $result["PC"];:$result是PDOStatement对象,不是数组,直接访问数组键会触发致命错误,直接中断后续代码执行,这是你修改循环写法后仍然无输出的核心原因 - PDO连接时未指定字符集参数,部分环境下会出现查询返回空、乱码甚至报错
- 初始循环写法
while ($row = $result)完全错误:该写法不会从结果集中读取任何行,且会造成死循环 - 输出表格行后未闭合
</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
相关产品推荐
相关产品推荐

