数据感知PHP组件


Data-aware PHP components?

许多桌面应用程序(例如,用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;

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