2013-12-10 3 views
0

У меня есть этот PHP код:работает Mysqli запрос внутри во время цикла

<?php 
//include database 
include 'db.php'; 
//grab the emails from the database 
$sql = "SELECT email FROM `emails`"; 
$result = mysqli_query($con, $sql); 
while($row = mysqli_fetch_array($result, MYSQL_ASSOC)){ 
    // update the database 
    //sanitinzw 
    $row = mysqli_real_escape_string($con, $row['email']); 
    //mail the emails 
    $to  = $row; 
    $subject = 'HELLOO'; 
    $message = 'alooooo'; 
    $headers = 'From: [email protected]' . "\r\n" . 
       'Reply-To: [email protected]' . "\r\n" . 
       'X-Mailer: PHP/' . phpversion(); 

    mail($to, $subject, $message, $headers);  
} 

?> 

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

<?php 
//include database 
include 'db.php'; 
//grab the emails from the database 
$sql = "SELECT email FROM `emails`"; 
$result = mysqli_query($con, $sql); 
while($row = mysqli_fetch_array($result, MYSQL_ASSOC)){ 
    // update the database 
    //sanitinzw 
    $row = mysqli_real_escape_string($con, $row['email']); 
    //mail the emails 
    $to  = $row; 
    $subject = 'hello'; 
    $message = 'aloooooo'; 
    $headers = 'From: [email protected]' . "\r\n" . 
       'Reply-To: [email protected]' . "\r\n" . 
       'X-Mailer: PHP/' . phpversion(); 

    mail($to, $subject, $message, $headers);  

    $sql = "UPDATE `emails` SET times_used = times_used + 1 WHERE email = '$row' "; 
    $result = mysqli_query($con, $sql); 
} 

?> 

по какой-то причине это только обновление первого сообщения электронной почты в базе данных, и когда я пытаюсь повторить из $ строки только первая электронная почта echoe'd

Спасибо за помощь

+0

не уверен, mysqli_real_escape_string существует как функция ... или по крайней мере php.net не знает об этом .. –

+0

да, это прекрасно работает первый блок кода работает идеально сво когда я добавляю его SQL messes up и только электронная почта и обновляет первое электронное письмо в базе данных – user3051232

ответ

3

Вы переписывая переменную $result, которая также используется в цикле while. После первой итерации $result устанавливается на результат запроса на обновление, поэтому нет других строк, которые могут быть извлечены.

Вы можете написать это, например:

$sql = "UPDATE `emails` SET times_used = times_used + 1 WHERE email = '$row' "; 
$result2 = mysqli_query($con, $sql); 

Это должно работать (если нет другой ошибка).

+0

вы мой друг хороший парень, подождите 3 минуты, чтобы принять – user3051232

0

не уверен mysqli_real_escape_string существует как функция ... или, по крайней мере, php.net не знает об этом .. более того, с mysql_real_escape_string (что, я думаю, вы хотите использовать), аргументы идут наоборот:

$row = mysql_real_escape_string($row['email'],$con); 
Смежные вопросы