За последние 24 часа нас посетили 23933 программиста и 1641 робот. Сейчас ищут 838 программистов ...

Бред какой-то

Тема в разделе "MySQL", создана пользователем Freakmeister, 26 апр 2015.

  1. Freakmeister

    Freakmeister Активный пользователь

    С нами с:
    20 дек 2009
    Сообщения:
    888
    Симпатии:
    5
    Почему такая выборка может не работать? Если я вбиваю этот запрос в phpMyAdmin, запись находится. А моим php-скриптом нет.

    Код (PHP):
    1. $query = mysql_query("SELECT * FROM `phpbb_topics` WHERE `topic_title` = 'Форум переехал'", $db);
    2. $row = mysql_fetch_array($query, MYSQL_ASSOC);
    3. echo '<pre>'; var_export($query); echo '</pre>'; // отладка
    4. echo '<pre>'; var_export($row); echo '</pre>'; // отладка             
    Возвращает:
    Код (Text):
    1. NULL
    2. false
    Подключение к БД осуществляется выше таким образом:

    Код (PHP):
    1. function connect_db() {
    2.     @$db = mysql_connect ('localhost', 'rsq', 'verysecurepassword') or die("Could not connect: ".mysql_error());
    3.     mysql_select_db ('rsq', $db) or die("Could not connect: ".mysql_error());
    4.     mysql_query("set character set utf8");
    5.     mysql_query("set character_set_client=utf8");
    6.     mysql_query("set character_set_connection=utf8");
    7.     mysql_query("set character_set_results=utf8");
    8.     return $db;
    9. }
    10. $db = connect_db(); 
    Добавлено спустя 5 минут 3 секунды:

    Сам php-скрипт имеет кодировку UTF-8, таблица БД тоже в UTF-8.
    [​IMG]
     
  2. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    А чоу до сих пор mysql, а не mysqli-то?
    Попробуй сразу переписать на них, чтоб все по докам.
     
  3. Freakmeister

    Freakmeister Активный пользователь

    С нами с:
    20 дек 2009
    Сообщения:
    888
    Симпатии:
    5
    Я первый раз такой бред вижу. ЛОЛШТО? ПОЧЕМУ?

    Код (PHP):
    1. $query2 = mysql_query("SELECT topic_id, forum_id FROM `phpbb_topics` WHERE `topic_title`='Форум переехал' LIMIT 2");
    2. while ($row2 = mysql_fetch_array($query2, MYSQL_ASSOC)) {
    3.     echo '<pre>'; var_export($row2); echo '</pre>'; // отладка
    4. }
    5. echo '<pre>'; var_export($row2); echo '</pre>'; // отладка 
    Возвращает:
    Код (Text):
    1. array (
    2.   'topic_id' => '4194',
    3.   'forum_id' => '272',
    4. )
    5.  
    6. false
     
  4. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    А mysql_error() что возвращает?
     
  5. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    А что тебя удивляет? В цикле оно работает. До тех пор пока не упрется в конец запроса и не словит false, которое, попав в условие цикла, останавливает его. Закономерно, после цикла, значение равно тому, каким было на момент его остановки.
     
  6. Freakmeister

    Freakmeister Активный пользователь

    С нами с:
    20 дек 2009
    Сообщения:
    888
    Симпатии:
    5
    С каких это пор цикл использует свои локальные переменные, а не глобальные? Это ж не функция.
     
  7. runcore

    runcore Старожил

    С нами с:
    12 окт 2012
    Сообщения:
    3.625
    Симпатии:
    158
    причем здесь локальные переменные. ты что действительно непонимаешь как работает приведенный тобой кусок кода?
     
  8. Freakmeister

    Freakmeister Активный пользователь

    С нами с:
    20 дек 2009
    Сообщения:
    888
    Симпатии:
    5
  9. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    У тебя WHILE. В нем условие. Он будет вечно работать, пока оно не станет FALSE. Внутри условия ты присваиваешь переменной очередную пачку данных из результата запроса. Эта пачка данных каждый раз интерпретируется как TRUE. И цикл отрабатывает снова и снова. В один момент данные кончаются. В переменную возвращается FALSE, мол, такие дела, инфы больше нет. FALSE он и в африке FALSE и, будучи условием WHILE, он обрывает его работу. При этом переменная, в которую был записан FALSE, не уничтожается. Это багофича Пыха. Во всяких других языках уничтожается, а тут не уничтожается. У пыха не все то область видимости, что ограничено фигурными скобками, такой уж он особенный.

    Итого, внутри цикла она у тебя выдает данные из запроса к БД. А строчка после цикла сработает только тогда, когда цикл будет разорван. Только тогда, когда переменная будет FALSE. Как только это случается, управление уходит той строчке и она выводит...FALSE!

    Надеюсь понятно расписал.
     
  10. Freakmeister

    Freakmeister Активный пользователь

    С нами с:
    20 дек 2009
    Сообщения:
    888
    Симпатии:
    5
    Я тупой короче.)) У меня while предохраняет от обработки FALSE значения $row2 в цикле, а не от присвоения FALSE переменной $row2. Чтобы $row2 не уходило в false, походу надо было сделать так:

    Код (PHP):
    1. $query2 = mysql_query("SELECT topic_id, forum_id FROM `phpbb_topics` WHERE `topic_title`='Форум переехал' LIMIT 2");
    2. while ($tempRow = mysql_fetch_array($query2, MYSQL_ASSOC)) {
    3.     $row2 = $tempRow;
    4.     echo '<pre>'; var_export($row2); echo '</pre>'; // отладка
    5. }
    6. echo '<pre>'; var_export($row2); echo '</pre>'; // отладка    
     
  11. Fell-x27

    Fell-x27 Суперстар
    Команда форума Модератор

    С нами с:
    25 июл 2013
    Сообщения:
    12.156
    Симпатии:
    1.771
    Адрес:
    :сердА
    Зачем все это? Просто внутри while каждое значение $row2 кидай в результирующий массив. Вуаля. После прохода цикла, у тебя есть массив с результатами.
     
  12. denis01

    denis01 Суперстар
    Команда форума Модератор

    С нами с:
    9 дек 2014
    Сообщения:
    12.227
    Симпатии:
    1.714
    Адрес:
    Молдова, г.Кишинёв
  13. Freakmeister

    Freakmeister Активный пользователь

    С нами с:
    20 дек 2009
    Сообщения:
    888
    Симпатии:
    5
    Мне нужно было пройтись по значениям в цикле, а потом по последним ещё раз пройтись хорошенечко уже за циклом.

    [​IMG]