【问题标题】:PHP question regarding a while statement for a loop关于循环的while语句的PHP问题
【发布时间】:2010-11-22 18:11:52
【问题描述】:

我请人为我编写一个循环,尽管我要求循环不断运行,因为它应该进行检查。假设我希望它循环运行 2 小时。

他们创造了这个;

$result = select_query ('tbltest', 'id,userid,test');

while ($data = mysql_fetch_array ($result))
{
    $userid = $data['userid'];
    $id = $data['id'];
    $test = $data['test'];
}

我对 PHP 了解不多,但在我看来,一旦没有更多行可以通过并放入数组中,它将结束循环。

如何获取行,但在接下来的 2 小时内继续循环? 谢谢!

【问题讨论】:

  • 真正的问题是你为什么要这样做?读取结果集后,重新设置光标以在 2 小时内再次读取它是没有意义的……你想达到什么目的?

标签: php mysql arrays


【解决方案1】:

我不知道你为什么要继续循环 2 小时而不做任何事情,但这里有一个解决方案(虽然是一个愚蠢的解决方案,如果它符合你的目的):

set_time_limit(0);
$time = time();
while (time()<$time+7200)
{
    if ($data = mysql_fetch_array ($result))
    {
        $userid = $data['userid'];
        $id = $data['id'];
        $test = $data['test'];
    }
    sleep(1); // so PHP doesn't consume too much resources
}

【讨论】:

  • 我仍然不明白为什么 OP 想要这样做......无论如何。不过,如果您不希望 CPU 在 2 小时内达到 100% 的峰值,您应该在 while 中调用 usleep
  • 你在写评论的时候这样做了
  • @stillstanding 谢谢。该脚本做的更多,并且需要一个循环来不断检查表中的值。我在 60 秒内实现了你的脚本作为测试,它只是不会运行循环:(
  • 你有多确定它没有?您的错误日志显示什么?
  • @stillstanding 我已经将它输出到 xml - 以前可以工作,现在不行了。
【解决方案2】:

如果你想在设定的时间内检查某些内容,你应该设置一个 cronjob 以每 X 分钟运行一次 PHP 脚本,而不是让 PHP 脚本连续循环。

【讨论】:

  • 我有一个 cron 设置来启动脚本,但循环需要运行得快于 1 分钟间隔。谢谢 simshaun
【解决方案3】:

你不能。当您执行 select_query 时,它实际上返回了当时完整结果集的指针。 $data = mysql_fetch_array ($result) 只能迭代在初始 select_query ('tbltest', 'id,userid,test'); 调用时结果集中存在的值。更不用说我想不出任何正确配置的 PHP 服务器会让你留下一个脚本运行 2 小时没有超时。也许您想要的是一个带有 AJAX 脚本的首页,该脚本会在循环中为您重新检查数据库。这样您就可以拥有 $.GET,并且在成功返回数据后,您将启动另一个 $.GET...

【讨论】:

  • 我可以将 $data = mysql_fetch_array ($result) 更改为其他内容以在循环中运行以检查值,即使几分钟?只是想看看有没有可能。
【解决方案4】:

你不能把原始数据库查询放在stillstanding的循环中吗?

set_time_limit(0);
$time = time();
while (time()<$time+7200)
{
    $result = select_query ('tbltest', 'id,userid,test');

    if ($data = mysql_fetch_array ($result))
    {
        $userid = $data['userid'];
        $id = $data['id'];
        $test = $data['test'];
    }
    sleep(1); // so PHP doesn't consume too much resources
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-21
    • 2016-06-22
    • 2021-07-25
    • 1970-01-01
    • 2017-03-09
    • 2013-11-01
    • 2013-11-17
    相关资源
    最近更新 更多