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
Форумы портала PHP.SU :: Версия для печати :: mysql_fetch_assoc
Форумы портала PHP.SU » » Объектно-ориентированное программирование » mysql_fetch_assoc

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

1. ole-martyno - 17 Января, 2012 - 13:12:42 - перейти к сообщению
Всем привет. Хочу реализовать в классе работы с БД данную схему:

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.  


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

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

вы в цикле каждый раз делаете вызов mysql_query.
у вас вообще происходит зацикливание.
даже если вы обойдете эту проблему, метод класса не запоминает послднее состояние и начнет все делать сначала.
одним из вариантов - сделать в классе свойство и присвоить ему значение mysql_query. а в методе проверять есть ли там значение и возвращать результат. и в конце концов обнулить свойство. возможны конечно и другие варианты.
3. Мелкий - 17 Января, 2012 - 13:41:40 - перейти к сообщению
Не получится.
Можно к такому виду привести:
PHP:
скопировать код в буфер обмена
  1. foreach(DB::select($sql) as $row) {
  2. var_dump($row);
  3. }

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

Но не советую так делать, неудобно для других запросов (результат запроса, имхо, должен быть отдельным классом) и не очевидно при чтении кода.
4. tillad - 17 Января, 2012 - 13:50:15 - перейти к сообщению
что то похожее

http://www.phpclasses[dot]org/packag[dot][dot][dot]ult-objects[dot]html

 

Powered by ExBB FM 1.0 RC1