За последние 24 часа нас посетили 18809 программистов и 1615 роботов. Сейчас ищут 915 программистов ...

Рабочий запрос. Не выводятся результаты...

Тема в разделе "PHP для новичков", создана пользователем Mysa, 15 ноя 2010.

  1. Mysa

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

    С нами с:
    19 июл 2010
    Сообщения:
    16
    Симпатии:
    0
    Вот такой код:
    Код (Text):
    1.  
    2. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    3. <html>
    4. <head>
    5.   <meta content="text/html; charset=CP-866"
    6.  http-equiv="content-type">
    7.   <title>TEST</title>
    8. </head>
    9. <body>
    10.  
    11. <?php
    12. $db_conn=mysql_connect("localhost", "****", "****") or die("Can`t connect!");
    13. mysql_select_db("Flex", $db_conn);
    14. mysql_query("SET NAMES cp866;", $db_conn);
    15.     $idRTU=45;     
    16.     $TI2_set=mysql_query("SELECT PointDescr, Offset From Points INNER JOIN AnalogEx ON Points.idPoint=AnalogEx.idPoint Where idRTU=$idRTU and 768<=Offset and Offset<=1023 Order by Offset;", $db_conn);
    17.                                
    18.     if ($k=mysql_num_rows($TI2_set)>0)
    19.     {  
    20.         echo("$k");
    21.         while($TI2=mysql_fetch_row($TI2_set));
    22.         {
    23.             echo("$TI2[0]</br>");
    24.         }
    25.     }
    26. ?>
    27. </body>
    28. </html>
    не выводит результат запроса. При этом если скопировать в MySQL сам запрос, то он выдает 5 результирующих строк. Кстати переменная $k после mysql_num_rows() имеет значение 1, что наводит на мысль о том, что mysql_query() возвращает просто TRUE как в случае с DELETE, например.
    Почему так???? Уже всю голову поломал.
     
  2. runner

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

    С нами с:
    16 апр 2010
    Сообщения:
    343
    Симпатии:
    1
    Адрес:
    Ташкент
    В $k у тебя результат сравнения mysql_num_rows($TI2_set)>0 - поскольку записей больше 0 - он равен true, т.е. 1
    вместо
    PHP:
    1.  
    2. if ($k=mysql_num_rows($TI2_set)>0)
    3.    {  
    4.       echo("$k");
    5.       while($TI2=mysql_fetch_row($TI2_set));
    6.       {
    7.          echo("$TI2[0]</br>");
    8.       }
    9.    }
    10.  
    попробуй
    PHP:
    1.  
    2. if ($TI2_set!=false)
    3. {  
    4.       $k=mysql_num_rows($TI2_set);
    5.       echo($k);
    6.       while($TI2=mysql_fetch_row($TI2_set));
    7.       {
    8.          echo("{$TI2[0]}</br>");
    9.       }
    10. }
    11.  
    вывода нет потому что элемент массива нужно заключать в фигурные скобки внутри строки
    если опять нет вывода то выведи запрос на экран и его выполни в консоли MySql или в PhpMyAdmin
     
  3. Mysa

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

    С нами с:
    19 июл 2010
    Сообщения:
    16
    Симпатии:
    0
    везде работает без них. Вообще, первый раз вижу такую форму записи. В любом случае, попробовал - как и ожидалось результат эдентичен.
    Насчет счетчика строк - ты прав, теперь выдает "5", что и должно быть. Вопрос почему не выводит... О_О
    В консоли уже тестил - есть 5 результирующих строк, о чем собсна писал выше.
     
  4. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    А почему вообще mysql_fetch_row используешь? какой ты результат ожидаешь?

    Почему не например mysql_fetch_assoc?
     
  5. Mysa

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

    С нами с:
    19 июл 2010
    Сообщения:
    16
    Симпатии:
    0
    Кароче, свежие вести:
    mysql_num_rows() - выдает как и должен 5

    цикл

    Код (Text):
    1.  
    2. while($TI2=mysql_fetch_row($TI2_set));
    3.       {
    4.          echo("$TI2[0]</br>");
    5.       }
    проходится только 1 раз. ПОЧЕМУ???
     
  6. Mysa

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

    С нами с:
    19 июл 2010
    Сообщения:
    16
    Симпатии:
    0
    tommyangelo
    ну как-то привык к нему :)
    Ожидаю не ассоциативный массив с N элементами, где N - количество запрошенных столбцов из БД, пронумерованных начиная с 0. Количество же таких массивов зависит от того, сколько таких строк обнаружил MySQL. Как-то так.
    А что с ним не так?
     
  7. Mysa

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

    С нами с:
    19 июл 2010
    Сообщения:
    16
    Симпатии:
    0
    Кстати, проверил - fetch_assoc тоже дает только 1 проход с пустым результатом.
     
  8. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    Хз, я им вообще никогда не пользовался, но вот пример из мануала меня смутил
    PHP:
    1.  
    2. <?php
    3. $result = mysql_query("SELECT id,email FROM people WHERE id = '42'");
    4. if (!$result) {
    5.     echo 'Could not run query: ' . mysql_error();
    6.     exit;
    7. }
    8. $row = mysql_fetch_row($result);
    9.  
    10. echo $row[0]; // 42
    11. echo $row[1]; // the email value
    12. ?>
    13.  
    Т.е. обработался только 1 ряд (row)

    Я бы сделал так

    while($TI2=mysql_fetch_assoc($TI2_set));
    {
    echo("PointDescr = $TI2['PointDescr'], Offset = $TI2['Offset']</br>");
    }
     
  9. runner

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

    С нами с:
    16 апр 2010
    Сообщения:
    343
    Симпатии:
    1
    Адрес:
    Ташкент
    Неудачно скопировал твой код- нужно было убрать точку с запятой
    PHP:
    1.  
    2. while($TI2=mysql_fetch_row($TI2_set))
    3. {
    4.      echo("{$TI2[0]}</br>");
    5. }
    6.  
    насчет фигурных скобок- просто привычка при вставке элемента массива в строку их использовать. Если вместо числовых индексов будет переменная, то использование без фигурных скобок приводит к ошибке
     
  10. Mysa

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

    С нами с:
    19 июл 2010
    Сообщения:
    16
    Симпатии:
    0
    tommyangelo
    fetch_row и fetch_assoc - идентичная штука, просто индексы у одного числовые, а у другого - по названию колонок. Ты в своем примере тоже тащишь по 1 row, просто делаешь это циклично пока они не закончатся, как собственно и я, только другой функцией.
    НЕ МОГ РАНЬШЕ ПРО НЕЕ СКАЗАТЬ??? :)))
    Все работает! :) Я как всегда - лопух, тему можно закрывать. Всем спасибо!