#php #mysql
#php #mysql
Вопрос:
Я пытаюсь получить только домены из списка электронных писем. это то, что у меня есть:
$query = "SELECT DISTINCT substring_index(email, '@', -1)";
$query .= " FROM `mailer_lists`";
$result = mysql_query($query) or die(mysql_error());
while($row = mysql_fetch_array($result)){
$sending_domain[] = $row['email'];
$_SESSION['sending_domain'] = $sending_domain;
}
По сути, он проверяет mailer_lists для всех доменов, на которые я отправляю. Все, что я хочу, это для доменов, которые находятся в mailing_lists
таблице, и сохранить их в массив для сеанса. Я сделал что-то неправильно в цикле while, и я не уверен, что именно.
Ответ №1:
Вы хотите установить его вне цикла.
$sending_domain = array();
while($row = mysql_fetch_array($result)){
$sending_domain[] = $row['email'];
}
$_SESSION['sending_domain'] = $sending_domain;
Ответ №2:
У меня нет средств проверить, что вы используете substring_index
правильно, но предполагая, что вы используете…
$query = "SELECT DISTINCT substring_index(email, '@', -1) as email_domain";
$query .= " FROM `mailer_lists`";
$result = mysql_query($query) or die(mysql_error());
$sending_domain = array();
while($row = mysql_fetch_array($result)){
$sending_domain[] = $row['email_domain'];
}
$_SESSION['sending_domain'] = $sending_domain;
Итак, изменения, которые я внес…
- Поместите
as email_domain
в запрос. - Создание пустого массива в начале
- Поместите присвоение сеансу вне цикла while, где оно принадлежит
Я думаю, что первые два были просто для формы, но мне так с ними удобнее. Шаг 3, вывод назначения сеанса из цикла, — это то, что действительно имеет значение. Это должно быть сделано только один раз, когда $sending_domain
заполнено.
Комментарии:
1. сразу после этого мне не хватало ‘as’ в моем sql-запросе. теперь это имеет большой смысл. я также предполагаю, что $ _SESSION внутри цикла while вызовет множество проблем с ресурсами, что объясняет, почему мой сервер действовал во время каждого задания cron.