Почему такая выборка может не работать? Если я вбиваю этот запрос в phpMyAdmin, запись находится. А моим php-скриптом нет. Код (PHP): $query = mysql_query("SELECT * FROM `phpbb_topics` WHERE `topic_title` = 'Форум переехал'", $db); $row = mysql_fetch_array($query, MYSQL_ASSOC); echo '<pre>'; var_export($query); echo '</pre>'; // отладка echo '<pre>'; var_export($row); echo '</pre>'; // отладка Возвращает: Код (Text): NULL false Подключение к БД осуществляется выше таким образом: Код (PHP): function connect_db() { @$db = mysql_connect ('localhost', 'rsq', 'verysecurepassword') or die("Could not connect: ".mysql_error()); mysql_select_db ('rsq', $db) or die("Could not connect: ".mysql_error()); mysql_query("set character set utf8"); mysql_query("set character_set_client=utf8"); mysql_query("set character_set_connection=utf8"); mysql_query("set character_set_results=utf8"); return $db; } $db = connect_db(); Добавлено спустя 5 минут 3 секунды: Сам php-скрипт имеет кодировку UTF-8, таблица БД тоже в UTF-8.
Я первый раз такой бред вижу. ЛОЛШТО? ПОЧЕМУ? Код (PHP): $query2 = mysql_query("SELECT topic_id, forum_id FROM `phpbb_topics` WHERE `topic_title`='Форум переехал' LIMIT 2"); while ($row2 = mysql_fetch_array($query2, MYSQL_ASSOC)) { echo '<pre>'; var_export($row2); echo '</pre>'; // отладка } echo '<pre>'; var_export($row2); echo '</pre>'; // отладка Возвращает: Код (Text): array ( 'topic_id' => '4194', 'forum_id' => '272', ) false
А что тебя удивляет? В цикле оно работает. До тех пор пока не упрется в конец запроса и не словит false, которое, попав в условие цикла, останавливает его. Закономерно, после цикла, значение равно тому, каким было на момент его остановки.
причем здесь локальные переменные. ты что действительно непонимаешь как работает приведенный тобой кусок кода?
У тебя WHILE. В нем условие. Он будет вечно работать, пока оно не станет FALSE. Внутри условия ты присваиваешь переменной очередную пачку данных из результата запроса. Эта пачка данных каждый раз интерпретируется как TRUE. И цикл отрабатывает снова и снова. В один момент данные кончаются. В переменную возвращается FALSE, мол, такие дела, инфы больше нет. FALSE он и в африке FALSE и, будучи условием WHILE, он обрывает его работу. При этом переменная, в которую был записан FALSE, не уничтожается. Это багофича Пыха. Во всяких других языках уничтожается, а тут не уничтожается. У пыха не все то область видимости, что ограничено фигурными скобками, такой уж он особенный. Итого, внутри цикла она у тебя выдает данные из запроса к БД. А строчка после цикла сработает только тогда, когда цикл будет разорван. Только тогда, когда переменная будет FALSE. Как только это случается, управление уходит той строчке и она выводит...FALSE! Надеюсь понятно расписал.
Я тупой короче.)) У меня while предохраняет от обработки FALSE значения $row2 в цикле, а не от присвоения FALSE переменной $row2. Чтобы $row2 не уходило в false, походу надо было сделать так: Код (PHP): $query2 = mysql_query("SELECT topic_id, forum_id FROM `phpbb_topics` WHERE `topic_title`='Форум переехал' LIMIT 2"); while ($tempRow = mysql_fetch_array($query2, MYSQL_ASSOC)) { $row2 = $tempRow; echo '<pre>'; var_export($row2); echo '</pre>'; // отладка } echo '<pre>'; var_export($row2); echo '</pre>'; // отладка
Зачем все это? Просто внутри while каждое значение $row2 кидай в результирующий массив. Вуаля. После прохода цикла, у тебя есть массив с результатами.
Мне нужно было пройтись по значениям в цикле, а потом по последним ещё раз пройтись хорошенечко уже за циклом.