如何在PHP中运行大循环

时间:2019-01-24 05:43:18

标签: php mysql

我有900项工作要做。每个工作都是从外部源获取数据并将其存储在数据库中。如果我运行200个或更少的作业运行平稳,但是如果运行200个以上的作业,则会显示以下错误消息:

“服务不可用 由于维护停机或容量问题,服务器暂时无法满足您的请求。请稍后再试。

此外,尝试使用ErrorDocument处理请求时遇到503服务不可用错误。”

为此,我正在使用PHP,mysql,并且来自外部源的响应为xml格式。

首次尝试: 我在数据库中有900个id,因此使用php收集到一个数组中,然后运行for循环,在每个循环中,我尝试通过提供id从外部源收集数据,但遇到上述错误。

第二次尝试: 我没有使用forloop,而是使用了while循环,但出现了相同的错误消息。

三次尝试: 我没有从数据库中获取每个ID,而是将所有900个ID收集到一个数组中,而是尝试从外部源收集信息,但仍然存在相同的错误。

(我的最终代码:)

$sql="select user_id from user_id_lists where user='temp'";
$result=mysqli_query($conn,$sql);
while($row=mysqli_fetch_assoc($result)){
 //code to fetch data from external source by providing each user_id 
//and then following response is collected.
$xml = simplexml_load_string(file_get_contents($request_url));
            if($xml){
            foreach($xml->Users->User as $resultt){

                $title=$resultt->UserProfile->Name;
                echo $title."<br/>";
            }
}

到目前为止,我了解到由于长时间循环(900条记录),它正在显示上述错误消息。必须有一种方法可以运行这么长的循环。请指导我如何解决该问题。谢谢。

1 个答案:

答案 0 :(得分:0)

使用mysqli_fetch_all()并使用foreach循环遍历结果,而不是一次获取一行。

类似这样

$sql="select user_id from user_id_lists where user='temp'";
$result=mysqli_query($conn,$sql);
$result= mysqli_fetch_all($result,MYSQLI_ASSOC);
foreach($result as $k => $v){
...
}