2013-04-02 2 views
0

Я хочу, чтобы этот фрагмент кода выбирал 2 строки данных из таблицы mysql и отправлял данные по URL-адресу.cURL POST, а

$qry = "SELECT id,email,forename,surname,ipaddress,optin_date,optin_url FROM $db_tble ORDER BY id ASC LIMIT 2"; 
$result = mysql_query($qry); 
$num = mysql_num_rows($result); 

if($result) 
{ 
$OK = 1; 
/** start feed **/ 

//create array of data to be posted 

while ($row = mysql_fetch_assoc($result)) 
{ 
// unset($post_items,$curl_connection,$result,$var,$info); 
$n++; 

$qry_id = $row["id"]; 
$post_data['u'] = $testfeed_user; 

$post_data['p'] = $testfeed_pswd; 

// Action data 
$post_data['email'] = $row["email"]; 

$post_data['fname'] = $row["forename"]; 

$post_data['lname'] = $row["surname"]; 

$post_data['ip'] = $row["ipaddress"];    

$post_data['date'] = $row["optin_date"]; 

$post_data['url'] = $row["optin_url"]; 

//traverse array and prepare data for posting (key1=value1) 

foreach ($post_data as $key => $value) { 
             $post_items[] = $key . '=' . $value; 

    } 

//create the final string to be posted using implode() 

$post_string = implode ('&', $post_items); 



//create cURL connection 

$curl_connection = curl_init($post_url); 


    //set options 

// HTTP request method defaults to GET 
    curl_setopt($curl_connection, CURLOPT_CONNECTTIMEOUT, 30); 

    curl_setopt($curl_connection, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"); 

    curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, true); 

    curl_setopt($curl_connection, CURLOPT_SSL_VERIFYPEER, false); 

    curl_setopt($curl_connection, CURLOPT_FOLLOWLOCATION, 1); 

    curl_setopt($curl_connection, CURLOPT_RETURNTRANSFER, 1); 


//set data to be posted 

curl_setopt($curl_connection, CURLOPT_POSTFIELDS, $post_string); 



     //perform our request 

    $result = curl_exec($curl_connection); 


    //close the connection 

curl_close($curl_connection); 
unset($post_string); 
    unset($post_data); 
unset($post_items); 
/** end feed **/ 
} 

Это терпит неудачу с 'PHP Warning: mysql_fetch_assoc(): поставляется аргумент не является допустимым MySQL результаты ресурс в ...' ошибка.

Это обычно означает, что есть ошибка с запросом, но приведенный ниже код работает с этим запросом. Таким образом, это должно быть что-то во время цикла, прерывая его, но я не могу понять, что.

// echo "Select OK!"; 
$qry = "SELECT id,email,forename,surname,ipaddress,optin_date,optin_url FROM $db_tble ORDER BY id ASC LIMIT 2"; 
$result = mysql_query($qry); 
$num = mysql_num_rows($result); 

if (mysql_num_rows($result) != 0) 
{ 
    $OK = 1; 
    /** start feed **/ 

    //create array of data to be posted 

    // $post_data['u'] = $testfeed_user; 

    // $post_data['p'] = $testfeed_pswd; 

    while ($row = mysql_fetch_assoc($result)) 
    { 
     $qry_id = $row["id"]; 
     $post_data['u'] = $testfeed_user; 

     $post_data['p'] = $testfeed_pswd; 

       // Action data 
     $post_data['email'] = $row["email"]; 

     $post_data['fname'] = $row["forename"]; 

     $post_data['lname'] = $row["surname"]; 

     $post_data['ip'] = $row["ipaddress"];    

     $post_data['date'] = $row["optin_date"]; 
     $post_data['url'] = $row["optin_url 



      //traverse array and prepare data for posting (key1=value1) 

     foreach ($post_data as $key => $value) { 

      $post_items[] = $key . '=' . $value; 
        } 



     //create the final string to be posted using implode() 

     $post_string = implode ('&', $post_items); 



     echo "id=" . $qry_id . " - " . $post_string . "<br /<br />"; 
     unset($post_items); 
    } 
} 

ответ

3

перезаписывается $result внутри while петли

$result = curl_exec($curl_connection); 

Я не знаю, почему, так как вы, кажется, не использовать его. Просто curl_exec достаточно.

+0

Спасибо, в этом была проблема. Глупо, я повторно использовал переменную $ result для другой цели, чтобы выявить потенциальные проблемы с ошибками URL, HTTP-ответа и содержимого HTML. т.е. получить «ОК» с сайта. – David