【问题标题】:Data-aware PHP components?数据感知 PHP 组件?
【发布时间】:2013-06-01 09:20:23
【问题描述】:

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

PHP 是否存在这种情况(可能在 HTML 表中显示查询结果并进行更新)?

如果不是,我们将如何创建它?

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

【问题讨论】:

标签: php


【解决方案1】:

由于 HTTP 协议的静态特性,一旦使用纯 PHP 呈现 HTML 页面,从技术上讲是不可能更新的,因此任何解决方案都必须包含 JavaScript 和 AJAX 调用。

模拟使用 AJAX 每 5 分钟重新渲染一次表格

不过模拟起来并不难,只需制作一个 PHP 页面,它会获取数据库的结果并将它们放入一个表中,然后使用 jQuery 的 .load() 函数来获取该表并在 @987654322 中呈现它@您选择的间隔为 5 秒或其他任何时间。

类似:

function updateTable(){
    $('#tableDiv').load(url);
}
var url = 'renderTable.php';
setInterval(updateTable,5000);

您可以将它放在任何带有DIV 和 id 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 传递给它以在适当的位置呈现。

【讨论】:

    【解决方案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;
    

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

    【讨论】:

    • 你还必须使用像 Javascript doesn't support native sockets 这样的 Flash 套接字对象。
    • 他可以使用 socket.io :) 并且忘记它
    • 是的,socket.io 正常使用 Flash 套接字对象(尽管我认为没有它也可以运行)。赞成,因为这实际上比我更准确地回答了这个问题。
    猜你喜欢
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多