MySQL填充Foreach

时间:2011-12-08 19:57:44

标签: php mysql email newsletter

我正在努力重建我刚才写的时事通讯系统。原始系统基于使用平面文件系统,我想将其转换为MySQL。我剩下的就是重建最终功能。我的问题是我需要做的是为数据库中存储的每封电子邮件使用一个循环。我认为每个循环是最好的方法,但是你如何一起使用MySQL和foreach?这是我目前的代码:

    $run = mysql_query("SELECT email FROM newsletter");    

    foreach ($run as $value) { 
        mail($value, $subject, $_POST['message'], $headers);
    }     

我尝试过很多不同的东西,似乎没什么用。我甚至试过这样的事情:

        $run = mysql_query("SELECT email FROM newsletter");    
    $email = mysql_fetch_array($run, MYSQL_ASSOC)
    $cols = implode (', ', $email);
    $run2 = mysql_query("SELECT $cols FROM newsletter");    
    while($emaillist = mysql_fetch_array($run2, MYSQL_ASSOC)){ 
        foreach ($emaillist as $value) { 
            mail($value, $subject, $_POST['message'], $headers);
        }                                                                       
    } 

这是基于我看似的其他一些例子。它不会给出任何错误,但它不会发送电子邮件。我非常感谢一些帮助。

2 个答案:

答案 0 :(得分:1)

您必须获取结果。你不能使用foreach,你会想要使用while。

$handle = mysql_query("SELECT email FROM newsletter");    

while ($row = mysql_fetch_assoc( $handle ) )
{
    mail( $row['email'], $subject, $_POST['message'], $headers);
}

http://us3.php.net/mysql_fetch_assoc

答案 1 :(得分:1)

这个伪代码

$run = mysql_query("SELECT email FROM newsletter");    

foreach ($run as $value) { 
    mail($value, $subject, $_POST['message'], $headers);
}   

可以正确改写为:

$result = mysql_query("SELECT body, emailaddress, subject  FROM emails");    
if (!$result) { die('error in mysql_query: '.mysql_error())}
while ($row = mysql_fetch_array($result) {
  $body = $row['body'];
  $address = $row['address'];
  $subject = $row['subject'];
  //do stuff with that data.
  //never use $_POST data directly, always feed it though `htmlentities` 
  //before outputting it (screen or email) 
  //or through mysql_real_escape_string() before inputting it in a DB.
  $echo htmlentities($body);  //sanitize your output or suffer XSS-attacks
  .....
}

如果你想使用一个SELECT的输出作为另一个SELECT的输入,请选择不要使用循环,而是使用连接:

SELECT e.body, e.subject, e.header, e.whatever FROM emails e
INNER JOIN newsletter n ON (n.id = e.newsletter_id)
WHERE n.id = 1466