下面的脚本每5秒调用一次。问题是,如果服务器响应较慢,“博客”中的一个条目可以连续选中两次,因为服务器还没有时间将“完成”设置为“1”。是否有行业标准(或任何你称之为)来防止这种情况发生?防止两次调用相同的脚本来选择相同的mysql行
$result = mysql_query("SELECT * FROM blogs WHERE done=0 LIMIT 1");
$rows = mysql_num_rows($result); //If there are no entries in with done set to 0, that means we've done them all; reset all entries to 0.
if($rows == 0)
{
mysql_query("UPDATE blogs SET done=0 WHERE done=1");
}
else
{
while($row = mysql_fetch_array($result))
{
mysql_query("UPDATE blogs SET done=1 WHERE id=$row[id]");
// Do stuff
}
}
我认为我可以将其更改为
while($row = mysql_fetch_array($result))
{
if($row['done'] == 1){ die; }
mysql_query("UPDATE blogs SET done=1 WHERE id=$row[id]");
//Do stuff
}
但将真正解决这一问题?我会想象会有一个更好的方式,真正防止它发生,毫无疑问的影子。
可能重复的[Processing action twice - how to prevent that?](http://stackoverflow.com/questions/6235654/processing-action-twice-how-to-prevent - 那) – genesis
请问你用什么机制让脚本每5秒运行一次?这是什么代码? – Luke
@Coulton只需在mysql数据库中的任意位置添加时间戳,并将其与PHP脚本中的当前时间进行比较。如果有超过5秒的差异,请运行它。如果没有,跑死;当然,你必须每隔5秒访问一次该网站才能正常工作,但有大量的3D派对服务可以做到这一点,甚至可以用cron作业。 – natli