有没有办法从PHP脚本查询设定时间?
我想编写一个带有id的PHP脚本,然后查询MySQL数据库以查看是否匹配。如果另一个用户可能尚未上传他们的匹配,那么我的目标是查询,直到找到匹配或直到5秒过去,然后我将返回0。
在伪代码中,这就是我的想法,但它似乎不是一个好方法,因为我读过循环查询并不是一个好习惯。
$id_in = 123;
time_c = time();
time_stop = time + 5; //seconds
while(time_c < time_stop){
time_c = time()
$result = mysql_query('SELECT * WHERE id=$id_in');
}
答案 0 :(得分:1)
听起来您的要求是轮询某个表,直到显示具有特定ID的行为止。你需要这样的查询才能做到这一点:
SELECT some-column, another column FROM some-table WHERE id=$id_in
(专业提示:请勿在软件中使用SELECT *
。)
您似乎想要轮询五秒然后放弃。让我们来解决这个问题。
一种选择是简单sleep(5)
,然后使用您的查询轮询表格。这样做的好处是非常简单。
另一种选择就是你拥有的。这将使你的php程序尽可能快地敲击桌子,一遍又一遍,直到轮询成功或直到你的五秒钟用完为止。这种方法的优点是当其他程序到达表时,你的php程序不会睡着。换句话说,它将以最小的延迟来获取对表的更改。然而,这种选择具有巨大的缺点。通过尽可能快地敲击桌子,你将占用MySQL服务器上的资源。这通常是浪费的。它会阻止你的应用程序有效扩展(如果你有一万个用户都这样做会怎么样?)具体来说,它可能会减慢试图击中表的其他程序,因此无法在五秒钟内完成更新。
然而,有中间立场。尝试做半秒钟等待 usleep(500000);
每次轮询表格之前。这不会浪费MySQL资源。即使你的php程序在其他程序到达桌面时处于睡眠状态,它也不会长时间睡着。
答案 1 :(得分:0)
无需进行简单的轮询和休眠。我不知道您的确切要求,但一般来说,您的问题要求GET_LOCK()
或PHP's Semaphore support。
假设您的上传过程以
开头SELECT GET_LOCK("id-123", 0);
您的查询线程可以等待该锁定:
SELECT GET_LOCK("id-123", 5) as locked, entities.*
FROM entities WHERE id = 123;
您最终可能会发现TRIGGER
就是您要找的东西。