同时运行foreach结果php

时间:2013-11-26 10:28:00

标签: php multithreading for-loop

我从我的数据库中提取结果,有一段时间我处理每个结果。现在我想同时运行所有这些结果。这可能与PHP?

下面我添加了一个示例代码,我希望每个结果都可以同时执行查询,而无需等到其他结果完成后再转到下一个。

 while ($accountdata = mysql_fetch_array($qaccountdata)) 
 { 
   $un  = $accountdata['email'];
   mysql_query("INSERT INTO log (id, email, item,height, stamp) VALUES ('', '$un','something','', '" . strtotime('now') . "')");              
 }

这样的事情怎么样? script.php包含该过程。

<?php

$q = 1;

$mh = curl_multi_init();

while ($accountdata = mysql_fetch_array($qaccountdata)) {
        $a = $accountdata['email'];
        $ch.$q = curl_init();
        curl_setopt($ch.$q, CURLOPT_URL, 'script.php?id='.$a);
        curl_setopt($ch.$q, CURLOPT_HEADER, 0);
        curl_multi_add_handle($mh,$ch.$q);
        $q++;
    }

$active = null;
//execute the handles
do {
    $mrc = curl_multi_exec($mh, $active);
} while ($mrc == CURLM_CALL_MULTI_PERFORM);

while ($active && $mrc == CURLM_OK) {
    if (curl_multi_select($mh) != -1) {
        do {
            $mrc = curl_multi_exec($mh, $active);
        } while ($mrc == CURLM_CALL_MULTI_PERFORM);
    }
}

curl_multi_remove_handle($mh, $ch.$q);
curl_multi_close($mh);  



?>

Script.php

 if (isset($_GET['type'])) {
     $_GET['id'] = $un
     //rest of code
  }

1 个答案:

答案 0 :(得分:4)

避免在循环中进行SQL查询

常见的错误是在循环中放置SQL查询。这导致多次往返数据库,并且脚本显着减慢。在下面的示例中,您可以更改循环以构建单个SQL查询并一次插入所有用户。

foreach ($userList as $user) {
  $query = 'INSERT INTO users (first_name,last_name) VALUES("' . $user['first_name'] . '", "' . $user['last_name'] . '")';
  mysql_query($query);
  }

产地:

INSERT INTO users (first_name,last_name) VALUES("John", "Doe")

您可以将数据组合到单个数据库查询中,而不是使用循环。

$userData = array();
foreach ($userList as $user) {
    $userData[] = '("' . $user['first_name'] . '", "' . $user['last_name'] . '")';
 }
$query = 'INSERT INTO users (first_name,last_name) VALUES' . implode(',', $userData);
mysql_query($query);

产地:

INSERT INTO users (first_name,last_name) VALUES("John", "Doe"),("Jane", "Doe")...

让自己和服务器受宠,请阅读文档here和一些提示here