2015-10-24 140 views
1

我在创建新闻简报PHP文件并执行它时遇到了问题。MYSQL fetch_array创建无限循环;

<?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: [email protected]\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。所以当循环开始时,它应该从我的数据库中获取数组 - >发送电子邮件 - >将收到的设置为'1'并停止 - >从表中获取其他电子邮件并执行相同操作。

但问题是,当我进入这个地址http://.../blast_script.php脚本不断发送给我电子邮件。我必须从我的数据库中删除表格才能停止它。

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

+0

是您的电子邮件地址新闻表不止一次?另外,您不应该使用'mysql_ *'库,因为它们已被弃用,请检查PDO或MySQLi。 – doublesharp

+0

它只使用一次。 10分钟前我输入了blast_script.php地址,9.5分钟前删除了表格,我仍然不断收到电子邮件! – Ancinek

+0

当你不使用'UPDATE'查询时,你的代码是否完美? –

回答

0

上述查询的写法的方式,你会得到确切的20封电子邮件,因为你将第一次选择限制为20个结果。

我看不出有任何理由会陷入无限循环。你做了什么来逐一调试每条语句?

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"); 
0

尝试取环前添加:

$run_count = 1; 

然后在循环中加入:

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

会告诉你,如果取环是被击中的次数太多,或者如果这个问题是在其他地方

还要检查$ mail_result的值是您在每个循环的期望