许多桌面应用程序(例如,使用Delphi构建的应用程序)使用“数据库感知组件”,例如网格,它显示数据库的内容 - 通常是查询的结果 - 并在数据库时自动更新它们的显示内容改变。
PHP是否存在这样的事情(可能在HTML表格中显示查询结果并更新)?
如果没有,我们将如何创建它?
(注意:This seemingly similar question没有帮助我)
答案 0 :(得分: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
tableDiv
的PHP(或HTML)页面中,并且每隔5秒就会在该div中呈现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传递给它。
答案 1 :(得分: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;
客户端连接到套接字并实时接收该事件