2015-10-24 97 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的值是您在每個循環的期望