许多桌面应用程序(例如,使用 Delphi 构建的应用程序)使用“数据库感知组件”,例如网格,它显示数据库的内容 - 通常是查询的结果 - 并在数据库内容更改时自动更新它们的显示。
PHP 是否存在这样的事情(可能在 HTML 表中显示查询结果并进行更新)?
如果没有,我们将如何创建它?
(注意:这个看似相似的问题对我没有帮助)
由于 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 传递给它以就地呈现。
可以做到,但需要混合不同的技术
如果我想实时监控数据库中所做的更改,我会考虑触发器和套接字 - 数据库中的触发器应该调用(插入或更新时)将事件添加到队列的函数 - 这是 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;
客户端连接到套接字并实时接收该事件