许多桌面应用程序(例如,用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);
你可以把它放在任何PHP(或HTML)页面的DIV
与id tableDiv
,它将呈现renderTable.php
的输出在该div每5秒不刷新。
实际监控数据库
这是可能的,您必须每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;
客户端连接到套接字并实时接收事件