Один запрос по разному обрабатывается на разных серверах

grey109

Новичок
Один запрос по разному обрабатывается на разных серверах

Есть такой код:

$result2 = mysql_query("select `subj_sub`, `text_sub` from `subscribes` where `id_subscribe` = ".$id_subscribe[$n]."");

На одном сервере работает все нормально, а на другом возвращает всегда один и тот же результат. Хотя в тоже время запрос:

$result = mysql_query("select `email` from `members` where `id_memb` = ".$id_memb[$n]."");

работает нормально.

Я так понимаю, что все дело в $id_subscribe[$n], т.к. переменная $id_subscribe[$n] всегда почему-то равна одному и тому же значению.

Подскажите, в чем может быть дело?
 

RomikChef

Guest
а проверить самому - вывести $id_subscribe[$n] на экран - религия не позволяет?
 

Krisha

pain in the neck
я бы сказал в это ситуации нужно смотреть откуда у тебя берется $id_subscribe[$n], и почему оно всегда одно и тоже :)
 

grey109

Новичок
Вроде бы понял в чем дело.

Всем спасибо.

Топик можно считать закрытым.
 

Verk

Guest
Ужас.

а $id_subscribe где и как инициализируется ?
 

Verk

Guest
во-первых, с базами так не работают, а во-вторых, по стилю кода много замечаний.

И если второе еще не критично, то над первым тебе следует поработать и чем раньше тем лучше.
 

Verk

Guest
NeoLynx, grey109 udalil svoy posting s kuskom koda gde byl cikl s dvumya zaprosami vnutri.
 

grey109

Новичок
Завтра напишу еще раз тот кусок кода, сейчас пора уходить.
 

grey109

Новичок
Вот тот кусок кода:

for ($n=0; $n<sizeof($id_memb); $n++)
{
$result = mysql_query("select email from members where id_memb = '$id_memb[$n]'");
list($email) = mysql_fetch_row($result);

$result2 = mysql_query("select subj_sub, text_sub from subscribes where id_subscribe = '$id_subscribe[$n]'");
list($subj_sub, $text_sub) = mysql_fetch_row($result2);

mail($email, $subj_sub, nl2br($text_sub), $headers);
echo "Письмо на адрес ".$email." отправлено.<br>";
flush();
}

Хочелось бы услышать почему "с базами так не работают", чем плохо "два запроса в цикле" и какие есть замечения по стилю кода.
 

Verk

Guest
С базами работают нежно и вдумчиво, как с ребенком. По несколько раз в цикле не дергают. Это тебе не какой-нибудь массив в shared memory или файл. Тут подход другой.
Составил один хороший запрос, получил результат и работаешь с ним как угодно и в каком угодно цикле.

Насчет стиля посмотри про кавычки здесь:
http://hr.php.net/manual/en/language.types.string.php#language.types.string.syntax.single

Про переменные в текстовых строчках и другие hints здесь:
http://php.spb.ru/php/speed.html

Еще есть т.н. Coding Standards. Влияют на читаемость кода.
Я, например, пытаюсь придерживаться PEAR'овских стандартов.
http://pear.php.net/manual/en/standards.php
 

RomikChef

Guest
http://php.spb.ru/php/speed.html - не надо эту статью упоминать.
Цифры, приведенные в ее заголовке, не соответствуют действительности
Тем более - про кавычки. Не вижу здесь никакого криминала.

А вот по поводу базы - у меня большие сомнения действительно.
откуда берется $id_memb - тоже из базы?
 

Verk

Guest
Автор оригинала: RomikChef
http://php.spb.ru/php/speed.html - не надо эту статью упоминать.
Цифры, приведенные в ее заголовке, не соответствуют действительности
Статейка старенькая. Но дает некоторое ощущение 'оптимизма' кода :)
Хорошо бы эти самые тесты на последней версии PHP прогнать.
 

RomikChef

Guest
Версия РНР не имеет абсолютно никакого значения.
вот разве что "ощущение" она только и может дать.

В ней есть некоторые моменты, которые действительно важны, но в основном это именно "оущущения".
еще раз повторяю, заголовок статьи - откровенная неправда. Ускорение в лучшем случае составляет доли процента.

Ну что - скажешь, если вынесешь массивы из кавычек в своей программе, она ДЕЙСТВИТЕЛЬНО ускорится на 25%?
Не смеши мои тапочки.
 

Verk

Guest
Программа-то не ускорится, но парсинг станет хоть сколько-нибудь проще... мелочь, короче.

Лично я выношу переменные всегда, только потому что мне читать код в таком виде проще.
 

grey109

Новичок
Насчет работы с базой.

$id_memb - это массив, в котором хранятся id пользователей, которые будут получать рассылку.

Ты предлагаешь вместо того, чтобы в цикле крутить запрос:
$result = mysql_query("select email from members where id_memb = '$id_memb[$n]'");

где-то до этого цикла, сделать что-то вроде:
$result = mysql_query("select email from members where id_memb = '$id_memb[0]' or id_memb = '$id_memb[5]' id_memb = '$id_memb[7]'");

А потом уже в цикле рассылки только делать:
list($email) = mysql_fetch_row($result);

Я правильно понял?


Статью про переменные уже читал, потому и пишу
echo "Письмо на адрес ".$email." отправлено.<br>";


2RomikChef:
Сейчас расскажу откуда берется $id_memb. И так, есть страница с подписчиками, на которой ты выбираешь кто получит данную рассылку. Т.е. это обыкновенная форма типа:

<form action="subscribe2.php" method="post">
Вася <input name="id_memb[]" value="1">
Петя <input name="id_memb[]" value="31">
Митя <input name="id_memb[]" value="451">

Ты нажимаешь Рассылка и данные передаются в файл subscribe2.php, где в цикле

for ($n=0; $n<sizeof($id_memb); $n++)

производится сама рассылка.

Понятно? Разве здесь тоже что-то не так?
 

RomikChef

Guest
В таком случае все нормально, ничего не трогай.
правда, вместо
list($email) = mysql_fetch_row($result);
я бы написал
extract(mysql_fetch_array($result));
поскольку это универсальнее, вместо
list($subj_sub, $text_sub) = mysql_fetch_row($result2);
получится та же строчка.

но это не принципиально.
в остальном код приемлемый.


постой!
это у тебя рассылка? Все получают одни и те же письма?
а зачем же ты тогда в цикле их достаешь?
 
Сверху