MYSQL fetch_array создание бесконечного цикла;

У меня возникла проблема с созданием файла 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: [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 скрипт постоянно посылает мне электронные письма. Я должен удалить таблицу из базы данных, чтобы остановить ее.

Как предотвратить этот бесконечный цикл для отправки только одного сообщения на каждое письмо в базе данных?

1

Решение

При написании вышеупомянутого запроса вы получите ровно 20 электронных писем, поскольку вы ограничиваете первый выбор до 20 результатов.

Я не вижу причин, по которым вы бы попали в бесконечный цикл. Что вы сделали для отладки каждого утверждения 1 на 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");
0

Попробуйте добавить перед циклом выборки:

$run_count = 1;

затем в цикле добавьте:

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

Это скажет вам, если цикл выборки выполняется слишком много раз или проблема в другом месте.

Также проверьте значение $ mail_result, что вы ожидаете в каждом цикле

0
По вопросам рекламы [email protected]