Предупреждение массива выборок Mysqli, не удается отладить

Я пытаюсь отладить скрипт рассылки новостей для проекта, над которым я работаю. Раньше это прекрасно работало с PHP Mailer, однако в итоге я сменил свой почтовик на Swift Mailer, и с тех пор у меня возникла самая странная проблема.

Я продолжаю получать следующее предупреждение после первой итерации цикла 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('support@domain.com')
      ->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('support@domain.com' => '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/>';

        }

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

Спасибо заранее!

1 ответ

Решение

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

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

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

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

Другие вопросы по тегам