如何在 PHP 中正确将数据库查询结果渲染为 HTML 表格

php 查询数据库后需将 `

` 标签的闭合标签 `
` 移至循环外部,否则每行数据都会生成一个独立且嵌套错误的表格结构,导致仅首行显示正常。

在使用 PHP(如 MySQLi 面向对象方式)从数据库获取多行记录并输出为 HTML 表格时,一个常见但容易被忽视的错误是:将 闭合标签错误地写在 while 循环内部。这会导致 HTML 结构严重错乱——浏览器会尝试自动修复非法嵌套(如

...
...
),最终仅首行可见,其余内容或丢失、或错位、或被忽略。

正确的做法是:

开始标签和表头 在循环前一次性输出;所有数据行 在循环内逐行生成;而
...
...
必须严格置于循环之后、条件块结束之前

以下是修正后的完整示例代码(含基础安全与可读性优化):

query($Sql);

if ($Result && $Result->num_rows > 0) {
    // 开始表格,输出表头
    echo '';
    echo '';
    echo '';
    echo '';
    echo '';
    echo '';

    // 循环输出每一行数据(注意:此处不输出 
Registration NumberName
!) while ($Row = $Result->fetch_assoc()) { // 推荐使用花括号语法避免解析歧义,并转义输出防止 XSS echo ''; echo '' . htmlspecialchars($Row['Registration_Number']) . ''; echo '' . htmlspecialchars($Row['Name']) . ''; echo ''; } echo ''; // ✅ 正确位置:循环结束后统一关闭表格 } else { echo '

No records found.

'; } $conn->close(); ?>

关键要点总结:

  • 必须成对出现在同一逻辑层级,不可被循环拆分;
  • 使用 htmlspecialchars() 转义输出内容,防范跨站脚本(XSS)风险;
  • 建议区分 (表头)与 (数据体),提升语义化与可维护性;
  • 检查 $Result 是否为有效结果集($Result && ...),避免调用空对象方法导致致命错误;
  • border="2" 属于过时的内联样式,生产环境建议改用 CSS 控制边框(如 style="border-collapse: collapse;")。
  • 遵循以上结构,即可稳定、安全、语义化地将数据库结果渲染为标准 HTML 表格。