[英]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.