2015-10-13 5 views
0

Я являюсь администратором баз данных, являющимся моим собственным разработчиком. Я пишу PHP-шаблон для некоторых автоматических писем в системе обучения, которые будут периодически запускать неактивных студентов. У меня возникла проблема, я думаю, с моей инструкцией WHERE в обновлении влиять только на текущую запись. Я могу обновить все записи, удалив инструкцию WHERE, но ничего с ней.Оператор обновления внутри fetch_assoc()

Может ли кто-нибудь увидеть мою ошибку? Мой основной запрос и моя почта работают нормально.

<?php 

$link = mysqli_connect('localhost','xxx','xxx','xxx'); 

$result = mysqli_query($link, 'SELECT email1 FROM email_test WHERE last_login < (NOW() - INTERVAL 45 DAY) AND email_number=0'); 

if($result->num_rows >= 1){ 
$subject = "A test of the email CRON"; 
$message='It has been 45 days since your last login.'; 

while($row=$result->fetch_assoc()) { 

$email="{$row['email1']}"; 

mysqli_query($link, 'UPDATE email_test SET email_number = 1, email_sent = NOW() WHERE email1=$email'); 

mail($email, $subject, $message); } 
} 
?> 

ответ

1

Ваши котировки должны фиксируя в:

mysqli_query($link, 'UPDATE email_test SET email_number = 1, email_sent = NOW() WHERE email1=$email'); 

Должен быть изменен на:

mysqli_query($link, "UPDATE email_test SET email_number = 1, email_sent = NOW() WHERE email1='$email'"); 

В PHP переменные обрабатываются в двойные кавычки, а переменные не разобраны в одинарные кавычки.

+0

спасибо! Я не мог видеть лес для деревьев. –

+0

по соответствующей заметке: я планирую использовать 3 из этих утверждений для уведомления студентов по различным критериям и вызова их в CRON. Могу ли я поместить все вызовы 3 '' в один и тот же текстовый файл и вызывать его один раз, или мне нужно 3 отдельных файла и вызывать их по отдельности. Все они будут запрашивать одни и те же таблицы. –

+0

Вы можете поместить все 3 в один и тот же текстовый файл, если хотите. Вы также можете разбить их, если хотите;) –

0

если EMAIL1 является строкой, то он должен быть в кавычках

mysqli_query($link, 'UPDATE email_test SET email_number = 1, email_sent = NOW() WHERE email1="' . $email .'"'); 
Смежные вопросы