Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用PHP和jQuery进行长轮询-更新和删除问题_Php_Jquery_Mysql - Fatal编程技术网

使用PHP和jQuery进行长轮询-更新和删除问题

使用PHP和jQuery进行长轮询-更新和删除问题,php,jquery,mysql,Php,Jquery,Mysql,我编写了一个使用长轮询概念的小脚本 其工作原理如下: jQuery将带有一些参数(比如lastId)的请求发送到php PHP从数据库中获取最新的id,并与lastId进行比较 如果lastId小于新获取的Id,则它将终止 编写脚本并回显新的记录 在jQuery中,我显示这个输出 我负责所有的安全检查。问题是,当记录被删除或更新时,无法知道这一点 我能得到的最接近的解决方案是计算行数,并将其与保存的行数变量匹配。但是,如果我有1000条记录,我必须重复所有1000条记录,这可能是一个很大的性

我编写了一个使用长轮询概念的小脚本

其工作原理如下:

  • jQuery将带有一些参数(比如lastId)的请求发送到php
  • PHP从数据库中获取最新的id,并与lastId进行比较
  • 如果lastId小于新获取的Id,则它将终止
    编写脚本并回显新的记录
  • 在jQuery中,我显示这个输出
我负责所有的安全检查。问题是,当记录被删除或更新时,无法知道这一点

我能得到的最接近的解决方案是计算行数,并将其与保存的行数变量匹配。但是,如果我有1000条记录,我必须重复所有1000条记录,这可能是一个很大的性能问题

此应用程序的CRUD功能完全分离,并在不同的服务器上运行。所以我不知道哪条记录被删除了

我不需要任何编码方面的帮助,但我正在寻找一些建议,以便在更新和删除时实现这一点。


请注意,websockets(我的fav)和node.js不是我的选项。

您也可以检查上次修改表本身的时间,而不是使用表中的特定ID

SQL:

如果成功,该语句应该返回如下内容

UPDATE_TIME
2014-04-02 11:12:15
然后使用生成的时间戳,而不是
lastid
。我正在使用一种非常类似的技术来显示和自动刷新日志,工作起来很有魅力

您必须根据需要调整语句,并用应用程序所需的值替换
yourdb
yourtable
。它还要求您具有访问权限,因此请检查此功能是否也可用

两种备选解决方案:

  • 如果上述解决方案对您的目的来说太不精确(当表每秒更改多次时可能会导致问题),您可以将该时间戳与当前机制结合使用
    lastid
    ,以覆盖新插入
  • 另一种方法是实现一个记录当前状态的表。这是ajax请求检查当前状态的地方。然后在数据表中生成generade,更新此表
您可以通过

SELECT id FROM table ORDER BY id DESC LIMIT 1
但在我看来,这是不可靠的,因为您可以将ID设置为1、2、3、7,然后插入一个ID为5的新行

请记住:最高ID不一定是最近的行。

当前自动增量值可通过以下方式获得:

SELECT AUTO_INCREMENT FROM information_schema.tables
WHERE  TABLE_SCHEMA = 'yourdb'
AND TABLE_NAME = 'yourtable';

也许时间戳+微时间是您的选择?

谢谢@Bjoern,这看起来是一个非常好的解决方案。我试图通过更改必填字段来执行查询,没有错误,但我得到的更新时间为null。我错过什么了吗?我将从php脚本中尝试这个,并告诉您。从php脚本中,它也显示为null。我需要特定类型的表吗?第三个选项在我的脑海中,很容易实现(实际上很长),但如果你提到的查询对我有效,那将非常棒。@AbhishekSaha你必须根据自己的需要调整语句,并用应用程序所需的值替换
yourdb
yourtable
。它还要求您有权访问
信息\u schema.tables
,因此请检查这是否也可用。我在前面的评论中写道“我试图执行查询以更改所需字段”。但我更新了表并更改了任何列值,自动增量字段对我没有帮助。
SELECT AUTO_INCREMENT FROM information_schema.tables
WHERE  TABLE_SCHEMA = 'yourdb'
AND TABLE_NAME = 'yourtable';