使用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中,我显示这个输出
请注意,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';