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 :: mysql_fetch_assoc

 PHP.SU

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


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

> Без описания
ole-martyno
Отправлено: 17 Января, 2012 - 13:12:42
Post Id


Новичок


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


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




Всем привет. Хочу реализовать в классе работы с БД данную схему:

PHP:
скопировать код в буфер обмена
  1.  
  2. $sql = "select team_id from teams";
  3. $res = mysql_query($sql) or(die());
  4. while ( $ts = mysql_fetch_assoc($res) )
  5. {
  6.     echo $ts['team_id'].'<br />';
  7. }
  8.  
  9. // хочу так
  10. $sql = "select team_id from teams";
  11.  
  12. while ( $ts = $msql->Select($sql) )
  13. {
  14.     echo $ts['team_id'].'<br />';
  15. }
  16.  
  17.  


в классе $msql пытался прописывать такой вид Select:
PHP:
скопировать код в буфер обмена
  1.  
  2.         public function Select($query)
  3.         {
  4.                 $result = mysql_query($query);
  5.                
  6.                 if (!$result)
  7.                         die(mysql_error());
  8.                
  9.                  $arr = mysql_fetch_assoc($result);            
  10.  
  11.                 return $arr;                           
  12.         }
  13.  


но так возвращается только одна строка, видимо. Как быть?
 
 Top
Panoptik
Отправлено: 17 Января, 2012 - 13:35:16
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2493
Дата рег-ции: Нояб. 2011  
Откуда: Одесса, Украина


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




посмотрите на эти 2 строки

и эту строку
PHP:
скопировать код в буфер обмена
  1.  
  2. while ( $ts = $msql->Select($sql) )

вы в цикле каждый раз делаете вызов mysql_query.
у вас вообще происходит зацикливание.
даже если вы обойдете эту проблему, метод класса не запоминает послднее состояние и начнет все делать сначала.
одним из вариантов - сделать в классе свойство и присвоить ему значение mysql_query. а в методе проверять есть ли там значение и возвращать результат. и в конце концов обнулить свойство. возможны конечно и другие варианты.


-----
Just do it
 
 Top
Мелкий Супермодератор
Отправлено: 17 Января, 2012 - 13:41:40
Post Id



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


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


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




Не получится.
Можно к такому виду привести:
PHP:
скопировать код в буфер обмена
  1. foreach(DB::select($sql) as $row) {
  2. var_dump($row);
  3. }

Смотрите интерфейс Iterator.
(Добавление)
Хотя нет, может получиться и ваш вариант. Но как-то костыльно.
(Добавление)
Да, вариант для вашего случая:
в Select смотрим, был ли переданный запрос уже, если был - то выдаём следующую строку

Но не советую так делать, неудобно для других запросов (результат запроса, имхо, должен быть отдельным классом) и не очевидно при чтении кода.


-----
PostgreSQL DBA
 
 Top
tillad
Отправлено: 17 Января, 2012 - 13:50:15
Post Id


Новичок


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


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




 
 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