2013-05-15 4 views
0

Я пытаюсь отладить сценарий рассылки рассылки для проекта, над которым я работаю. Это работало отлично с PHP Mailer, однако я в конечном итоге изменил мою почту на Swift Mailer, и поскольку у меня была самая странная проблема.Mysqli fetch array warning, неспособный отлаживать

я получаю следующее предупреждение, после первой итерации цикла While (один адрес электронной почты отправляется на первый адрес электронной почты в наборе результатов MySQL, то я получаю это предупреждение):

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, integer given in /home1/username/public_html/domain/newslettermailer.php on line 15 

Это мой newlettrmailer.php сценарий:

include('inc/connect.inc.php'); 

    $query = "SELECT * FROM `newsletter`"; 

    $result = mysqli_query($mysqli, $query); 

    $status = Array(); 

    require('mailer/swift_required.php'); 


    while($row = mysqli_fetch_array($result)){ 
     $email = $row['email']; 

     echo $email . " GOOD<br/>"; 

     // Create the Transport 
     $transport = Swift_SmtpTransport::newInstance('mail.domain.com', 25) 
     ->setUsername('[email protected]') 
     ->setPassword('password'); 

     // Create the Mailer using your created Transport 
     $mailer = Swift_Mailer::newInstance($transport); 

     $mailTo = Array(); 
     $mailTo[] = $email; 


    $message = Swift_Message::newInstance('Newsletter Test!') 
     ->setFrom(array('[email protected]' => 'Subject')) 
     ->setTo($mailTo); 

    $body = '<strong style="text-decoration:underline;">Test</strong>'; 
     $message->setBody($body,'text/html'); 


      // Send the message 
     $result = $mailer->send($message); 



     if($result==0) 
     { //MESSAGE FAILED 
      $status .= $email . ': <span style="color:red; font-weight:bold;">Fail</span><br/>'; 
     } 
     else 
     { //SUCCESS! 
      $status .= $email . ': <span style="color:green; font-weight:bold;">Success!</span><br/>'; 
     } 

    } 

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

  include('inc/connect.inc.php'); 

     $query = "SELECT * FROM `newsletter`"; 

     $result = mysqli_query($mysqli, $query); 

     $status = Array(); 

     require('mailer/swift_required.php'); 


     while($row = mysqli_fetch_array($result)){ 
      echo $row['email'] . '<br/>'; 

     } 

Я пытаюсь отлаживать это довольно долгое время, и мне действительно сложно провести время с этим, я ценю любые предложения относительно того, почему это происходит.

Большое спасибо заранее!

ответ

7

Вы повторно использовать переменную $result:

$result = $mailer->send($message); 

Так что на второй итерации цикла while, он пытается передать, что mysqli_fetch_array() вместо результата возвращения из mysqli_query().

Используйте другую переменную для этого второго результата.

+0

+1, Спасибо за ответ. Я ценю это! Это действительно была проблема :) – AnchovyLegend

+0

Поскольку проблема возникает на 2-й итерации, очевидная вещь для поиска - это назначение переменной внутри цикла, не так ли? – Barmar

+0

Не было так очевидно для меня, хотя это должно было быть, вы правы. По какой-то причине я думал, что это связано с mysql. – AnchovyLegend