0

许多桌面应用程序(例如,使用 Delphi 构建的应用程序)使用“数据库感知组件”,例如网格,它显示数据库的内容 - 通常是查询的结果 - 并在数据库内容更改时自动更新它们的显示。

PHP 是否存在这样的事情(可能在 HTML 表中显示查询结果并进行更新)?

如果没有,我们将如何创建它?

(注意:这个看似相似的问题对我没有帮助)

4

2 回答 2

3

由于 HTTP 协议的静态特性,使用纯 PHP 呈现后,从技术上讲不可能更新 HTML 页面,因此任何解决方案都必须包含 JavaScript 和 AJAX 调用。

模拟使用 AJAX 每 5 分钟重新渲染一次表格

不过模拟起来并不难,只需制作一个 PHP 页面,它会获取数据库的结果并将它们放入一个表中,然后使用 jQuery 的.load()函数来获取该表并以DIV您选择的间隔呈现它,间隔为 5秒或什么的。

就像是:

function updateTable(){
    $('#tableDiv').load(url);
}
var url = 'renderTable.php';
setInterval(updateTable,5000);

您可以将它放在任何DIV带有 id的 PHP(或 HTML)页面中,它会每 5 秒在该 div 中tableDiv呈现输出,而无需刷新。renderTable.php

实际监控数据库

这是可能的,您必须每 5 秒在 cron 上设置一个 PHP 文件(或每 5 秒进行一次 AJAX 调用)才能运行类似的东西SELECT MD5(CONCAT(rows,'_',modified)) AS checksum FROM information_schema.innodb_table_stats WHERE table_schema='db' AND table_name='some_table';(假设为 innoDB),然后将其与之前的校验和进行比较。

如果校验和相同,您可以将“false”传递给修改后的 AJAX 调用,这将告诉它不要在表格上呈现任何内容。如果不是,您可以将新表的 HTML 传递给它以就地呈现。

于 2013-06-01T09:31:47.843 回答
2

可以做到,但需要混合不同的技术

如果我想实时监控数据库中所做的更改,我会考虑触发器和套接字 - 数据库中的触发器应该调用(插入或更新时)将事件添加到队列的函数 - 这是 postgresql 的示例函数(plsh 是自定义处理程序)

CREATE FUNCTION propagate_event(tablename) RETURNS text AS '
    #!/bin/sh
    # execute script that will add event to message queue
    /var/scripts/change_in_table.sh "$1"
' LANGUAGE plsh;

客户端连接到套接字并实时接收该事件

于 2013-06-01T09:54:44.633 回答