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

技术求助:实现phpMyAdmin数据库更新时仅刷表格或定时局部刷新

解决方案

方案一:每2秒局部刷新指定表格

要实现仅刷新表格而非整个页面,需将表格生成逻辑抽为独立PHP接口,通过AJAX定时请求接口并更新页面中的表格容器。

步骤1:创建独立表格生成脚本(get_labours_table.php)

把原页面中生成表格的PHP代码单独提取,作为AJAX请求的目标:

<?php
require './connect.php';

$sql = "SELECT * FROM labours";
$result = $conn->query($sql);

if ($result->num_rows > 0) {
    echo "<table border='2' width='100%' height='20%' style='text-align:center;font-size:50px;' id='table'>
          <tr><th>ID</th><th>NAME</th><th>WORK</th><th>SALARY</th></tr>";
    while($row = $result->fetch_assoc()) {
        echo "<tr><td>" . $row["id"]. "</td><td>" . $row["name"]. "</td><td>" . $row["work"]. "</td><td>". $row["salary"] . "</td></tr>";
    }
    echo "</table>";
} else {
    echo "0 results";
}
$conn->close();
?>

步骤2:修改主页面代码

主页面仅保留表格容器和AJAX定时刷新逻辑,不再直接生成表格:

<script src="https://code.jquery.com/jquery-3.5.0.js"></script>
<div id='div1'>
    <!-- 表格将通过AJAX加载至此 -->
</div>

<script>
// 定义加载表格的函数
function loadTable() {
    $('#div1').load('get_labours_table.php');
}

// 页面加载完成后初始化表格,并每2秒刷新一次
$(document).ready(function() {
    loadTable();
    setInterval(loadTable, 2000);
});
</script>

方案二:数据库更新时自动刷新表格(实时触发)

若要实现数据库数据更新时才刷新表格,可采用长轮询方式(适合轻量场景):

步骤1:修改get_labours_table.php,添加更新时间检测

假设labours表已存在updated_at字段(若没有,需先添加该DATETIME类型字段,并在数据更新时自动同步该字段值):

<?php
require './connect.php';

// 获取客户端传递的最后更新时间,默认值设为久远时间
$lastUpdated = isset($_GET['last_updated']) ? $_GET['last_updated'] : '1970-01-01 00:00:00';

// 查询最新数据更新时间
$sql = "SELECT MAX(updated_at) as latest_update FROM labours";
$result = $conn->query($sql);
$row = $result->fetch_assoc();
$latestUpdate = $row['latest_update'] ?? '1970-01-01 00:00:00';

// 若无新数据,等待5秒后再次检查(长轮询核心逻辑)
if (strtotime($latestUpdate) <= strtotime($lastUpdated)) {
    sleep(5);
    $result = $conn->query($sql);
    $row = $result->fetch_assoc();
    $latestUpdate = $row['latest_update'] ?? '1970-01-01 00:00:00';
}

// 有新数据则返回表格HTML和最新更新时间
$response = [
    'latest_update' => $latestUpdate,
    'table_html' => ''
];

if (strtotime($latestUpdate) > strtotime($lastUpdated)) {
    $sqlData = "SELECT * FROM labours";
    $resultData = $conn->query($sqlData);
    
    if ($resultData->num_rows > 0) {
        $response['table_html'] .= "<table border='2' width='100%' height='20%' style='text-align:center;font-size:50px;' id='table'>
                                    <tr><th>ID</th><th>NAME</th><th>WORK</th><th>SALARY</th></tr>";
        while($rowData = $resultData->fetch_assoc()) {
            $response['table_html'] .= "<tr><td>" . $rowData["id"]. "</td><td>" . $rowData["name"]. "</td><td>" . $rowData["work"]. "</td><td>". $rowData["salary"] . "</td></tr>";
        }
        $response['table_html'] .= "</table>";
    } else {
        $response['table_html'] = "0 results";
    }
}

echo json_encode($response);
$conn->close();
?>

步骤2:修改主页面AJAX逻辑,实现长轮询

<script src="https://code.jquery.com/jquery-3.5.0.js"></script>
<div id='div1'>
    <!-- 表格将通过AJAX加载至此 -->
</div>

<script>
let lastUpdated = '1970-01-01 00:00:00';

function checkForUpdates() {
    $.getJSON('get_labours_table.php', {last_updated: lastUpdated}, function(response) {
        // 有新内容则更新表格
        if (response.table_html) {
            $('#div1').html(response.table_html);
            lastUpdated = response.latest_update;
        }
        // 立即发起下一次请求,保持长连接
        checkForUpdates();
    }).fail(function() {
        // 请求失败时延迟3秒重试
        setTimeout(checkForUpdates, 3000);
    });
}

// 页面加载完成后启动长轮询
$(document).ready(function() {
    checkForUpdates();
});
</script>

这种方式仅在数据库数据真正更新时才刷新表格,避免了不必要的重复请求。


内容的提问来源于stack exchange,提问作者HARSH J.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 09:35:14