早上,如何发布数据与php curl和做循环?我被困在这里了……代码不能循环POST数据…
下面是我的代码:
<?php
$conn = mysql_connect('localhost', 'root', '');
if (!$conn) {
die('Could not connect: ' . mysql_error());
}else{
mysql_select_db('psv');
}
$query="SELECT * FROM accounts WHERE user_first_name != ''";
$result = mysql_query($query,$conn);
for ($i=1;$i<=20;$i++)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.domain.com/user/register");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$r=mysql_fetch_row($result);
curl_setopt($ch, CURLOPT_POSTFIELDS,
"user_first_name=$r[2]&user_last_name=$r[3]&user_email=$r[4]&user_password=$r[5]&user_phone=0$r[6]&user_address=(value)");
}
curl_exec($ch);
curl_close($ch);
?>
有什么建议吗?
我这样修改了我的代码,但是不做循环:
<?php
$conn = mysql_connect('localhost', 'root', '');
if (!$conn) {
die('Could not connect: ' . mysql_error());
}else{
mysql_select_db('passionville');
}
$query="SELECT * FROM accounts WHERE user_first_name != ''";
$result = mysql_query($query,$conn);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.domain.com/user/register");
curl_setopt($ch, CURLOPT_POST, 1);
for ($i=1;$i<=20;$i++)
{
$r=mysql_fetch_row($result);
curl_setopt($ch, CURLOPT_POSTFIELDS,
"user_first_name=$r[2]&user_last_name=$r[3]&user_email=$r[4]&user_password=$r[5]&user_phone=0$r[6]&user_address=(value)");
}
curl_exec($ch);
curl_close($ch);
?>
MySQL函数已弃用,不应使用。将提供类似的MySQLi答案。
把你的动作分开一点。从MySQL中收集数据,然后构建您的post数据。
<?php
$conn = mysqli_connect('localhost', 'root', '', 'psv');
if (!$conn) {
die('Could not connect: ' . mysqli_connect_error());
}
$query="SELECT * FROM accounts WHERE user_first_name != ''";
$missing_names = array();
if($result = mysqli_query($conn, $query)){
// Assume you will have more than one row in the recordset
while($r=mysqli_fetch_assoc($result)){
$missing_names[] = $r;
}
mysqli_free_result($result);
mysqli_close($conn);
} else {
$err = mysqli_error($conn);
mysqli_close($conn);
die("SQL Error: $err'r'n";);
}
$results = array();
foreach($missing_names as $r) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.domain.com/user/register");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($r));
$results[] = curl_exec($ch);
curl_close($ch);
}
?>
那么我们假设你的查询有3个结果。它们将存储在$missing_names
数组中。遍历数组并从每行发布数据。有一些方法可以保持连接或做多个帖子,但我认为这是一个更好的方法。如果出现错误或期望结果,可以检查$results
数组中的FALSE
。您还可以通过$results
计数知道它运行了多少次。您已将返回传输设置为true,因此您必须期待一些返回数据。