Mandrill似乎打破了MySQL Select

时间:2014-02-11 18:01:18

标签: php mysql select mandrill

我已经剥离了这个,试图找到这个问题的根源,但根本无法指出它。

这成功回应了每个ID

$result = mysqli_query($con,"SELECT id FROM users");

// Each user matching criteria
while($row = mysqli_fetch_array($result))
{   
    echo $row['id'];
}

然而,当我包含Mandrill时,它会停止工作,但我仍然会得到第一个ID echo

//为昨天注册的用户搜索数据库     $ result = mysqli_query($ con,“SELECT id FROM users”);

// Each user matching criteria
while($row = mysqli_fetch_array($result))
{   
    echo $row['id'];
  include($_SERVER['DOCUMENT_ROOT'].'/src/Mandrill.php');
  $mandrill = new Mandrill('hidden');

  try {
      $template_name = $content_template;
      $message = array(
          'html' => '<p>Example HTML content</p>',
          'text' => 'Example text content',
          'subject' => 'test',
          'from_email' => 'hidden',
          'from_name' => 'hidden',
          'to' => array(
              array(
                  'email' => 'hidden',
                  'name' => 'Tim',
                  'type' => 'to'
              )
          ),
          'headers' => array('Reply-To' => 'hidden.com'),
          'important' => false,
          'track_opens' => true,
          'track_clicks' => true,
          'tags' => array('$meta_tags'),
          'google_analytics_domains' => array('hidden'),
          'metadata' => array('website' => 'hidden')
      );
      $ip_pool = 'Main Pool';
      $result = $mandrill->messages->sendTemplate('jotText-Auto-i101-welcome', $template_content, $message, $async, $ip_pool, $send_at);
      print_r($result);
  } catch(Mandrill_Error $e) {
      // Mandrill errors are thrown as exceptions
      echo 'A mandrill error occurred: ' . get_class($e) . ' - ' . $e->getMessage();
      // A mandrill error occurred: Mandrill_Unknown_Subaccount - No subaccount exists with the id 'customer-123'
      throw $e;
    }

}

我收到的错误消息是

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, array given in /home/timbaker/public_html/jottext/foundation/database_tasks/cron_welcome.php on line 18

这对我来说这是原始查询的一个问题...但我无法理解为什么Mandrill会导致这种情况发生?

另外值得注意的是: - Mandril没有错误消息 - 电子邮件成功发送

1 个答案:

答案 0 :(得分:3)

最初,$result变量仅存储mysqli_query调用的结果,并且它工作得很好。但是当你添加了邮件发送代码时,你不小心重用了同一个变量来存储Mandrill动作的结果:

$result = $mandrill->messages->sendTemplate(...);

...因此失去了它的初始值(mysqli_result),并用新值(数组)交换它(一个资源) - 因此你得到的错误信息。

显然,最简单的方法就是重命名这个变量:

$mailStatus = $mandrill->messages->sendTemplate(...);
print_r($mailStatus); // or do something else with it

底线:尽量避免使用过于通用的名称 - 最终所有$vars$data以及$result在混合时会很难咬你。我甚至不在谈论可读性。 )


作为旁注(感谢@Pierre提到这一点),你最好在循环之外移动$mandrill变量的实例化 - 否则每次新行时你都会include工作处理完毕。