繁体   English   中英

同时运行foreach结果php

[英]simultaneously run foreach results php

我从数据库中提取结果,并花了一段时间处理每个结果。 现在,我想同时运行所有这些结果。 这可能与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
  }

避免在循环中执行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")...

让自己和你的服务器的忙,阅读文档这里和一些技巧在这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM