MYSQL fetch_array创建无限循环;

时间:2015-10-24 17:36:31

标签: php mysql email newsletter

我在创建简报PHP文件并实现它时遇到了问题。

<?php
include_once "connect_to_mysql.php";
$sql = mysql_query("SELECT * FROM news WHERE received='0' LIMIT 20");
$mail_body = "";
while($row = mysql_fetch_array($sql)){
    $id = $row["ID"];
    $name = $row["name"];
    $email = $row["email"];

    $mail_body= "Test message";
    $subject = "PHP Newsletter";
    $headers = "From: no-reply@pageaddress.com\r\n";
    $headers = "Content-type: text/html\r\n"; //To musi byc zawarte jeśli nasz email będzie w formie HTML
    $to = "$email";

    $mail_result = mail($to, $subject, $mail_body, $headers) or die ("Error!");

    if ($mail_result) {
        mysql_query("UPDATE news SET received='1' WHERE email='$email' LIMIT 1");
    } else {
        echo ("Some freaking error :o!");
    }

}
?>

我确实与我的数据库有关联。我确实把一封电子邮件发送到了这个数据库中。我在表格中将收到的默认设置为0。因此,当循环开始时,它应该从我的datebase获取数组 - &gt;发送电子邮件 - &gt;将收到的设置为'1'并停止 - &gt;从表中获取其他电子邮件并执行相同的操作。

但问题是,当我进入此地址http://.../blast_script.php时,脚本会一直向我发送电子邮件。我必须从我的日期库中删除该表才能将其停止。

如何防止这个无限循环只向日期库中的每封电子邮件发送一条消息?

3 个答案:

答案 0 :(得分:0)

编写上述查询的方式,您将收到20封电子邮件,因为您将首次选择限制为20个结果。

我认为你没有理由陷入无限循环。你做了什么来逐个调试每个语句?

答案 1 :(得分:0)

您应该检查:

mysql_query("UPDATE news SET received='1' WHERE email='$email' LIMIT 1");

正在检查数据库中收到的是1。

如果没有,那么您就知道收到的内容并未正确更新导致无限循环。

如果您希望对此进行测试,并且不希望收到20封电子邮件,请更改以下代码:

$sql = mysql_query("SELECT * FROM news WHERE received='0' LIMIT 20");

$sql = mysql_query("SELECT * FROM news WHERE received='0' LIMIT 1");

答案 2 :(得分:0)

尝试在获取循环之前添加:

$run_count = 1;

然后在循环中添加:

echo "The loop has been run $run_count times";
$run_count++;

这将告诉您是否多次触发获取循环或者问题是否在其他地方

同时检查$ mail_result的值是否是您在每个循环中所期望的