【问题标题】:Loop in PHP taking time, Fatal error: Maximum execution time of 120 seconds exceeded inPHP 中的循环耗时,致命错误:超过 120 秒的最大执行时间
【发布时间】:2018-06-29 19:24:16
【问题描述】:

致命错误:超过 120 秒的最大执行时间...

$level = "1";

$get_question = $user_home->runQuery('SELECT * FROM questions WHERE Level = :Level ORDER BY RAND()');
$get_question->bindparam(":Level",$level);
$get_question->execute();
$fetch_question=$get_question->fetch(PDO::FETCH_ASSOC);

$stmtpr = $user_home->runQuery("SELECT * FROM used WHERE Last=:user_name");
$stmtpr->execute(array(":user_name"=>$fetch_question['Id']));
$rowpr = $stmtpr->fetch(PDO::FETCH_ASSOC);

while($stmtpr->rowCount() > 0)
        {
    $get_questionl = $user_home->runQuery('SELECT * FROM questions WHERE Level = :Level ORDER BY RAND()');
    $get_questionl->bindparam(":Level",$level);
    $get_questionl->execute();
    $fetch_question=$get_questionl->fetch(PDO::FETCH_ASSOC);
        }

只有在loop 中执行才需要时间。

【问题讨论】:

    标签: php loops mysqli pdo while-loop


    【解决方案1】:

    $stmtpr->rowCount() 的值永远不会改变,因此您的循环永远不会结束。你基本上是在说:

    while (10 > 1) { ... }
    

    目前尚不清楚您要执行的操作,但您似乎正在尝试重新查询刚刚查询的相同行。您可能只想遍历原始结果集。

    另请注意,ORDER BY RAND() 是出了名的性能不佳。查看this question 了解一些替代想法。

    【讨论】:

    • 好的,我会寻找替代品..,你说$stmtpr->rowCount() 的值永远不会改变......在我的情况下如何改变它?跨度>
    【解决方案2】:

    在代码的顶部添加这个 无限执行时间

    ini_set('max_execution_time', 0);

    此外,您可以添加无限的内存使用量

    ini_set("memory_limit", "-1");

    在您的情况下,也可以像这样更改 rowCount()

      $count = $stmtpr->rowCount();
    
    while($count > 0)
            {
        $get_questionl = $user_home->runQuery('SELECT * FROM questions WHERE Level = :Level ORDER BY RAND()');
        $get_questionl->bindparam(":Level",$level);
        $get_questionl->execute();
        $fetch_question=$get_questionl->fetch(PDO::FETCH_ASSOC);
        $count--;
            }
    

    【讨论】:

    • 代码呢,代码编码正确吗?我对此表示怀疑!
    • @user9836106 我已经更新了我的答案并写了评论
    猜你喜欢
    • 2015-12-06
    • 2020-01-17
    • 2011-01-09
    • 2013-09-03
    • 2014-04-20
    • 2011-12-02
    • 2011-07-07
    相关资源
    最近更新 更多