PHP查询MySQLi数据渲染表格仅显示第一条记录问题求助
问题根因
你现在仅能展示一条数据是两个问题共同导致的:
- SQL查询语句加了
LIMIT 1约束,强制数据库最多返回1条记录,就算后续写了遍历逻辑也只能拿到这1条 - 代码中仅调用了一次
mysql_fetch_row($result)读取结果,没有循环遍历整个结果集,自然只能输出第一条数据
额外提示:你当前使用的mysql_*系列函数是PHP官方早已废弃的扩展,PHP 7及以上版本已经完全移除该扩展,建议后续业务迭代时切换到mysqli或PDO扩展,保证服务兼容性与安全性。
修复后可参考代码
<?php include 'dbinc.php'; mysql_connect($mysql_hostname,$mysql_user,$mysql_password); mysql_select_db($mysql_database); // 修复点1:去掉LIMIT 1,可根据需要加合理的分页限制,比如LIMIT 1000避免一次性加载太多数据导致内存溢出 $order = "SELECT * FROM quanta ORDER BY ID DESC"; $result = mysql_query($order); // 表格开头放在循环外,避免重复生成表格 echo ("<table class='table table-striped'>"); // 可自行添加表头,方便查看列含义 echo "<thead><tr><th>指标</th><th>值</th></tr></thead><tbody>"; // 修复点2:加while循环遍历所有结果集 while($data = mysql_fetch_row($result)){ $data_id = $data[0]; $data_timestamp = $data[1]; $data_validated = $data[2]; $data_type = $data[3]; $data_type_str = "Unknown"; if ($data[3] == 0) $data_type_str = "Periodic"; if ($data[3] == 1) $data_type_str = "Fault"; $data_site_id = $data[4]; $data_datetime = $data[5]; $data_device_id = $data[6]; $data_status = $data[7]; $data_status_hex= bin2hex($data_status); $data_raw = $data[8]; $stats = unpack ( "C*" , $data_status ); // 单条数据的表格行输出 echo(" <tr><td>Site Id</td><td>$data[4]</td></tr> <tr><td>Date Time</td><td>$data_datetime</td></tr> <tr><td>Device Id</td><td>$data_device_id</td></tr>"); echo "<tr><td>Smoke Fire Alarm</td><td"; if (($stats[5] & 0x01) == false) echo " >no Smoke alarm"; else echo " >smoke alarm"; echo "</td></tr>" ; echo "<tr><td>Door</td><td>"; if (($stats[5] & 0x02) == false) echo " >door closed"; else echo " >door open"; echo "</td></tr>"; echo "<tr><td>Mode</td><td>"; if (($stats[5] & 0x04) == false) echo " >Auto"; else echo " >Manual"; echo "</td></tr>"; echo "<tr><td>Load</td><td>"; if (($stats[5] & 0x08) == false) { if (($stats[5] & 0x10) == false) echo "[- Load on EB -]<br>"; else echo "[- Load on site Battery -]<br>"; } else { if (($stats[5] & 0x10) == false) echo "[- Load on DG -]<br>"; else echo "[- Not Used -]<br>"; } echo "</td></tr>"; echo "<tr><td>Alternate Fault</td><td>"; if (($stats[4] & 0x04) == false) echo " >no fault"; else echo " >fault"; echo "</td></tr>"; // 可选:不同站点的记录之间加分隔行 echo "<tr><td colspan='2'><hr></td></tr>"; } // 表格闭合标签放在循环外 echo "</tbody></table>"; ?>
可选优化建议
- 如果需要按站点ID分组展示所有对应告警,可以把SQL改成
ORDER BY data_site_id, ID DESC,相同站点的记录会排在一起,更方便查看 - 16000条数据量较大,建议加分页功能,避免页面加载过慢、内存占用过高
内容的提问来源于stack exchange,提问作者APP Learener
相关产品推荐
相关产品推荐

