在PHP中循环占用时间,出现致命错误:

时间:2018-06-29 19:24:17

标签: php loops mysqli pdo while-loop

  

致命错误:...超过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时才花费时间。

2 个答案:

答案 0 :(得分:2)

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

while (10 > 1) { ... }

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

还要注意,ORDER BY RAND()的表现非常差。请查看this question中的一些替代方法。

答案 1 :(得分:0)

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

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--;
        }