You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 18:39:04