PHP导出MySQL表仅一行正常显示的问题求助
问题分析与修复方案
我一眼就发现你代码里的关键问题啦!问题出在表格闭合标签的位置——你把</tbody>和</table>放到了while循环的内部,这就导致每输出一行数据后,表格就被提前闭合了,后面的自然就跑到表格外面去了。另外还有个小拼写错误:<thread>应该是<thead>,虽然这个不会直接导致显示异常,但也是需要修正的细节。
错误代码的核心问题
你的原代码中,while循环里每次都会执行:
$table .= "</tbody>"; $table .= "</table>";
这意味着第一行数据输出后,表格就已经被完全闭合了,第二行及以后的数据自然就会出现在<table>标签之外,导致你看到的显示异常。
修正后的完整代码
<?php require('db.php'); $sql = "SELECT * FROM `users`;"; $table = ""; // 注意:这里要使用mysqli_error匹配mysqli扩展,不要用旧的mysql_error $result = mysqli_query($connection, $sql) or die(mysqli_error($connection)); $table = "<table class='table table-hover table-dark'>"; $table .= "<thead>"; // 修正拼写错误:thread -> thead $table .= "<tr>"; $fieldsInfo = $result->fetch_fields(); foreach($fieldsInfo as $fieldinfo) { $table .= "<th scope='col'>{$fieldinfo->name}</th>"; } $table .= "</tr>"; $table .= "</thead>"; $table .= "<tbody>"; // 循环只处理每行数据的<tr>和<td>,不提前闭合tbody和table while ($row = $result->fetch_assoc()) { $table .= "<tr>"; foreach ($row as $columnValue) { $table .= "<td>$columnValue</td>"; } $table .= "</tr>"; } // 所有行处理完成后,再统一闭合tbody和table $table .= "</tbody>"; $table .= "</table>"; echo $table; ?>
额外实用提示
- 错误处理规范:原代码里的
die(mysql_error())是旧版mysql扩展的语法,你用的是mysqli扩展,必须改成die(mysqli_error($connection))才能正确捕获错误信息。 - 代码格式化习惯:把代码拆分成多行、加上缩进,能让标签嵌套结构更清晰,下次遇到类似问题时更容易快速定位。
- 调试小技巧:遇到HTML结构异常时,直接查看页面的源代码(而非仅依赖审查元素),能更直观地看到标签嵌套的错误。
内容的提问来源于stack exchange,提问作者845614720
相关产品推荐
相关产品推荐

