
php 查询数据库后需将 `
在使用 PHP(如 MySQLi 面向对象方式)从数据库获取多行记录并输出为 HTML 表格时,一个常见但容易被忽视的错误是:将 </table> 闭合标签错误地写在 while 循环内部。这会导致 HTML 结构严重错乱——浏览器会尝试自动修复非法嵌套(如 <table><tr>...</tr></table><table><tr>...</tr></table>),最终仅首行可见,其余内容或丢失、或错位、或被忽略。
正确的做法是:<table> 开始标签和表头 <tr><th>...</th></tr> 在循环前一次性输出;所有数据行 <tr><td>...</td></tr> 在循环内逐行生成;而 </table> 必须严格置于循环之后、条件块结束之前。
以下是修正后的完整示例代码(含基础安全与可读性优化):
<?php
$Sql = "SELECT Registration_Number, Name FROM vta";
$Result = $conn->query($Sql);
if ($Result && $Result->num_rows > 0) {
// 开始表格,输出表头
echo '<table border="2" class="data-table">';
echo '<thead><tr>';
echo '<th>Registration Number</th>';
echo '<th>Name</th>';
echo '</tr></thead>';
echo '<tbody>';
// 循环输出每一行数据(注意:此处不输出 </table>!)
while ($Row = $Result->fetch_assoc()) {
// 推荐使用花括号语法避免解析歧义,并转义输出防止 XSS
echo '<tr>';
echo '<td>' . htmlspecialchars($Row['Registration_Number']) . '</td>';
echo '<td>' . htmlspecialchars($Row['Name']) . '</td>';
echo '</tr>';
}
echo '</tbody></table>'; // ✅ 正确位置:循环结束后统一关闭表格
} else {
echo '<p>No records found.</p>';
}
$conn->close();
?>✅ 关键要点总结:
立即学习“PHP免费学习笔记(深入)”;
- <table> 和 </table> 必须成对出现在同一逻辑层级,不可被循环拆分;
- 使用 htmlspecialchars() 转义输出内容,防范跨站脚本(XSS)风险;
- 建议区分 <thead>(表头)与 <tbody>(数据体),提升语义化与可维护性;
- 检查 $Result 是否为有效结果集($Result && ...),避免调用空对象方法导致致命错误;
- border="2" 属于过时的内联样式,生产环境建议改用 CSS 控制边框(如 style="border-collapse: collapse;")。
遵循以上结构,即可稳定、安全、语义化地将数据库结果渲染为标准 HTML 表格。











