Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Метод выборки из бд

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
ext
Отправлено: 29 Апреля, 2012 - 12:08:04
Post Id


Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




Добрый день, в классе есть метод, который выбирает из бд строки по ид юзера, таких строк может быть сколько угодно много. В этод метод поступает параметр (ид юзера), когда вызываешь метод, он доходит до первой строки и выводит ее, а остальные нет. Пробовал через foreach делать, но там 2 первых одинаковых строки он выводит. Подскажите пожалуйста, как сделать, чтобы он выводил все записи.
 
 Top
Alho
Отправлено: 29 Апреля, 2012 - 13:08:43
Post Id



Посетитель


Покинул форум
Сообщений всего: 322
Дата рег-ции: Апр. 2012  


Помог: 11 раз(а)




PHP:
скопировать код в буфер обмена
  1. $q=mysql_query("SELECT * FROM table WHERE id=$id");
  2.         while($res=mysql_fetch_assoc($q))
  3.         {
  4.                 print_r($res);
  5.         }
 
 Top
ext
Отправлено: 30 Апреля, 2012 - 07:22:44
Post Id


Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




Alho, это совсем не то
 
 Top
DelphinPRO
Отправлено: 30 Апреля, 2012 - 08:45:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




ext пишет:
это совсем не то

Вы предлагаете продолжать угадывать, что у вас там,
или все-таки покажете код метода?


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
nagrizolich
Отправлено: 30 Апреля, 2012 - 22:12:29
Post Id


Новичок


Покинул форум
Сообщений всего: 5
Дата рег-ции: Апр. 2012  


Помог: 0 раз(а)




Почему у вас в БД много юзеров с одним ID? Не понял
 
 Top
Striker
Отправлено: 30 Апреля, 2012 - 22:27:18
Post Id



Частый гость


Покинул форум
Сообщений всего: 128
Дата рег-ции: Июль 2011  
Откуда: Киев


Помог: 1 раз(а)

[+]


ext
ext пишет:
это совсем не то

А что именно не канает?
Я в таких случаях выдираю инфу из БД циклом do-while, а не while, так как последний может не выдать первую запись.

PHP:
скопировать код в буфер обмена
  1. $q=mysql_query("SELECT * FROM table WHERE id='$id'");
  2. do
  3. {
  4.  echo $res['поле1']." ".$res['поле2']; //и т.д.
  5. }
  6. while($res=mysql_fetch_assoc($q));

(Добавление)
nagrizolich пишет:
Почему у вас в БД много юзеров с одним ID?

Там поле ID взято просто для примера. Ха-ха
 
 Top
Мелкий Супермодератор
Отправлено: 30 Апреля, 2012 - 22:30:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Striker пишет:
так как последний может не выдать первую запись.

Не может. Если вы только сами её не пропустили.
А вот пару нотайсов ваш "пример" исправно выдаст.
(Добавление)
nagrizolich пишет:
Почему у вас в БД много юзеров с одним ID?

А где сказано, что это - разные юзеры? Может, это обычная связка 1:М


-----
PostgreSQL DBA
 
 Top
Striker
Отправлено: 30 Апреля, 2012 - 22:34:32
Post Id



Частый гость


Покинул форум
Сообщений всего: 128
Дата рег-ции: Июль 2011  
Откуда: Киев


Помог: 1 раз(а)

[+]


Цитата:
Не может. Если вы только сами её не пропустили.

Реально щас занимаюсь одним проектом, дык проблема порешалась заменой цикла while на do-while. Сам в шоке)
Цитата:
А вот пару нотайсов ваш "пример" исправно выдаст.

Это почему же?
 
 Top
Мелкий Супермодератор
Отправлено: 30 Апреля, 2012 - 22:42:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)




Striker пишет:
Это почему же?

Однако по факту. Обращение к неинициализированной переменной на первой итерации цикла.

Striker пишет:
Реально щас занимаюсь одним проектом, дык проблема порешалась заменой цикла while на do-while.

Если это так - на то есть причина в коде, исполняемом ранее. mysql_data_seek или, что более вероятно, mysql_fetch_*


-----
PostgreSQL DBA
 
 Top
Striker
Отправлено: 30 Апреля, 2012 - 23:07:44
Post Id



Частый гость


Покинул форум
Сообщений всего: 128
Дата рег-ции: Июль 2011  
Откуда: Киев


Помог: 1 раз(а)

[+]


Мелкий
Да внатуре, ты прав.

Толькош-то создал тестовую БД с таблицей на три поля id, name, number и написал скрипт, который вытаскивает все записи у которых number=1 (а таких в таблицу занес 3).
Спойлер (Отобразить)


while нормально вывел все три записи. do-while тоже, причем еще два нотайса.

А вот в реальном проекте while не выводит первую запись, хотя ничего там заумного нету, а из-за do-while нотайсы не выскакивают. Полтергейст! Улыбка
 
 Top
LIME
Отправлено: 30 Апреля, 2012 - 23:11:00
Post Id


Активный участник


Покинул форум
Сообщений всего: 10732
Дата рег-ции: Нояб. 2010  


Помог: 322 раз(а)




Радость предрекаю тебе еще множество "Полтергейстов"
 
 Top
Striker
Отправлено: 01 Мая, 2012 - 03:51:40
Post Id



Частый гость


Покинул форум
Сообщений всего: 128
Дата рег-ции: Июль 2011  
Откуда: Киев


Помог: 1 раз(а)

[+]


LIME
Уже раздуплился где был косяк, благодаря тебе. Если б не твоя издевка, то я бы не придал этому значения. Язычок
 
 Top
ext
Отправлено: 01 Мая, 2012 - 12:47:25
Post Id


Новичок


Покинул форум
Сообщений всего: 32
Дата рег-ции: Июнь 2011  


Помог: 0 раз(а)




Записи из бд собираю через pdo, передавая их в объекте.
Связка в бд id:stuff, т.е. один юзер может иметь несколько вещей.

Class:
Спойлер (Отобразить)


DB:
Спойлер (Отобразить)


Запускаем:
CODE (htmlphp):
скопировать код в буфер обмена
  1. [Lee@GX-620 ~]$ php example.php
  2. 2

Выводит только первую строку
В принципе решил проблему так:
PHP:
скопировать код в буфер обмена
  1. while($row = $res -> fetch()) $m[] = $row -> stuff;
  2. foreach($m as $value) print $value."\n";

Но с некоторыми таблицами бывают проблемы

(Отредактировано автором: 01 Мая, 2012 - 13:21:57)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Объектно-ориентированное программирование »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB