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