数据感知PHP组件?

时间:2013-06-01 09:20:23

标签: php

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

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

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

(注意:This seemingly similar question没有帮助我)

2 个答案:

答案 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;

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