
本文介绍如何使用PHP循环遍历数据库记录,并按每3条数据为一组自动插入<tr>标签,实现响应式三列布局的HTML表格,避免手动计算行数,确保结构语义正确且兼容性强。
本文介绍如何使用php循环遍历数据库记录,并按每3条数据为一组自动插入`
要实现“每三条记录开启新行”的表格布局(即第1–3条在第一行、第4–6条在第二行、第7条起新开第三行……),关键在于控制<tr>标签的起始与闭合时机,而非简单按索引模3判断——因为最后一组可能不足3项,需确保最终</tr>闭合,且不额外多输出空行。
以下是优化后的完整实现方案(已整合原代码逻辑并修复常见陷阱):
<style type="text/css">
table {
border: 1px solid #1C6EA4;
background-color: #EEEEEE;
text-align: center;
border-collapse: collapse;
width: 100%;
}
td {
width: 33.333%;
padding: 8px;
border: 1px solid #ccc;
}
</style>
<table>
<?php
include "db.php";
// 统一连接(避免重复创建连接对象)
$connection = new mysqli($servername, $username, $password, $dbname);
if ($connection->connect_error) {
die("Connection failed: " . $connection->connect_error);
}
// 查询所有设备数据
$select = "SELECT Equipment_Name FROM equipment";
$result = $connection->query($select);
if (!$result || $result->num_rows === 0) {
echo "<tr><td colspan='3'>暂无设备信息</td></tr>";
} else {
$rowNum = 0;
echo "\n<tr>"; // 开启首行
while ($row = $result->fetch_assoc()) {
echo "\n<td>" . htmlspecialchars($row["Equipment_Name"]) . "</td>";
$rowNum++;
// 当前为第3、6、9...条时,且不是最后一条,则闭合当前行并开启新行
if ($rowNum % 3 === 0 && $rowNum < $result->num_rows) {
echo "\n</tr>\n<tr>";
}
}
// 强制闭合最后一行(无论是否满3列)
echo "\n</tr>";
}
$connection->close();
?>
</table>✅ 关键要点说明:
- 使用单个数据库连接,提升性能与可维护性;
- htmlspecialchars() 防止XSS攻击,增强安全性;
- $rowNum % 3 === 0 判断是否为第3、6、9…条,配合 $rowNum < $result->num_rows 避免在末尾多输出<tr>;
- 必须在循环外补上最终</tr>——否则当总记录数不能被3整除时(如7条),第7条所在行将缺少闭合标签,导致HTML结构损坏;
- CSS中td { width: 33.333% }配合table { width: 100% }确保三列等宽自适应(建议用CSS Grid或Flexbox替代表格布局以获更好响应性,但本例保持语义化表格结构)。
? 进阶提示: 若需支持更多列数(如每4列换行),仅需将 3 替换为对应数字,并同步调整CSS宽度即可。此模式具备良好扩展性,适用于产品展示、卡片列表等典型场景。
立即学习“PHP免费学习笔记(深入)”;



















