Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Для профи > Классы,


Автор: Opik 30.4.2005, 18:45
Вообщем есть класс для работы с SQL
Код

<?
   class mysql
  {
     function query($query)
    {
       return mysql_query($query);
     }
    function fetchRow()
   {
       return mysql_fetch_row($hz) // вот тут не знаю как быть
    }

}
    $db = new mysql;
   $query = $db->query("select...");
   $result = $query->fetchRow(); // Нужно что бы именно такой вызов был.
 
?>

Как такое сделать?

Автор: Opik 30.4.2005, 19:42
Ориентировочно набросал так:
Код
<?
  class mysql
  {
     function connect($host, $user, $pass, $dbname)
     {
          $this->lnk = mysql_connect($host, $user, $pass);
          mysql_select_db($dbname, $this->lnk);
     }
     function query($query)
     {
         $query = mysql_query($query, $this->lnk);
         return new result($query);
     }
  }
  class result
  {
     var $last;
     function result($query)
     {

        $this->last = $query;
     }
     function fetchRow()
     {
         return mysql_fetch_assoc($this->last); // вот тут не знаю как быть
     }
  }
    $db = new mysql;
    $db->connect('localhost', 'root', '', 'chat');
    $query = $db->query("select * from members");
    while($row = $query->fetchRow())
    {
       print $row['Login'];
    }

?>

У кого нить есть замечания?
Добавлено @ 19:46
Нужного эффекта всё равно не добилсяsmile(

Автор: Mal Hack 30.4.2005, 20:09
Opr
Я делал так.
Свойство - массив, которое хранит массывы с данными. Каждый итый элемент - массив ячеек от итого запроса.

Автор: Opik 30.4.2005, 20:26
Mal Hack
можно примером?

Автор: Mal Hack 30.4.2005, 21:21
Зы, класс не оптимизирован и не дописан... Но ядро есть.

Автор: AntonioBanderaz 30.4.2005, 22:23
Чувак!!! Попробуй объявить классовую переменную, к которой Ты будешь обращаться

Код

<?    
   class mysql    
 var $HZ
  {    
     function query($query)    
    {    
       $this->HZ = mysql_query($query);    
     }    
    function fetchRow()    
   {    
       return mysql_fetch_row($this->HZ) // вот тут не знаю как быть    
    }    
}    
    $db = new mysql;    
   $query = $db->query("select...");    
   $result = $query->fetchRow(); // Нужно что бы именно такой вызов был.    
    
?>


Теперь попоробуй!

Автор: Opik 1.5.2005, 14:04
AntonioBanderaz
попробуй выборку сделать в цикле.

Автор: AntonioBanderaz 1.5.2005, 16:21
Код

<?     
   class mysql  {    
       var $HZ;    
       var $row = array();
      
    function query($query)     
    {     
         $this->HZ = mysql_query($query);     
     }     
    function fetchRow()     
   {     
      while($r = mysql_fetch_row($this->HZ))
          array_push($this->row,$r); // вот тут не знаю как быть 
       return $this->row;    
    }     
}     
    $db = new mysql;     
   $query = $db->query("select...");     
   $result = $query->fetchRow(); // Нужно что бы именно такой вызов был.     
   
//размер массива sozeof($result);
    
?>




Добавлено @ 16:23
Код

<?      
   class mysql  {     
       var $HZ;     
       var $row = array();    
       
    function mysql($query)      
    {      
         $this->HZ = mysql_query($query);      
     }      
    function fetchRow()      
   {      
      while($r = mysql_fetch_row($this->HZ))    
          array_push($this->row,$r); // вот тут не знаю как быть    
       return $this->row;     
    }      
}     
//я бы даже вот так сделал    
   $db = new mysql("select...");      
   $result = $query->fetchRow(); // Нужно что бы именно такой вызов был.      
    
//размер массива sozeof($result);    
     
?>

Автор: <Spawn> 6.5.2005, 12:07
Цитата
Нужного эффекта всё равно не добился(


А какой эффект требуется - я проверил его работоспособность и все работало, хотя написание класса, обычно, сводится к формированию какой то внутренней логики, чего я тут не вижу - тут имеется лишь обертка над функциями и не более тогоsmile Какая цель преследовалась при создании класса? Или это только начальная заготовка?

Автор: Opik 6.5.2005, 14:52
<Spawn>
Попробуй через класс сделать это:
Код

$query = mysql_query("select..") 
while($row = mysql_fetch_assoc($query)) 
{ 
     $query = mysql_query("select... where .... = '".$row['id']."'") 
     $result = mysql_fetch_assoc($query); 
     var_dump($result);     
}  

Автор: IZ@TOP 7.5.2005, 02:13
Opr, у тебя возникли проблемы с выполнением нескольких результов?

Автор: Opik 7.5.2005, 11:22
IZ@TOP
именно.

Автор: IZ@TOP 7.5.2005, 12:32
Opr, я эту проблему пока не решал. Решал немного по другому. У меня есть метод который возвращает все записи в массив, вот ей и пользуюсь в этом случае, а потом гоняю запросы сколько нужно. Можно кстати продумать вариант с тем, чтобы можно было в метод получения записи передавать ссылку на результ.

Автор: <Spawn> 12.5.2005, 10:25
Цитата(Opr @ 6.5.2005, 16:52)
<Spawn>
Попробуй через класс сделать это:
Код

$query = mysql_query("select..") 
while($row = mysql_fetch_assoc($query)) 
{ 
     $query = mysql_query("select... where .... = '".$row['id']."'") 
     $result = mysql_fetch_assoc($query); 
     var_dump($result);     
}  

Имхо, такой код не выполнить без предварительного сохранения результатат первого селекта, так как он будет утерян результатом второгоsmile Хотя если создать второй коннект к базе... но думаю тут достаточно сначала все сохранить, а потом уже второй селект делать(и опять же чем вызвана такая необходимость? Может все можно решить путем внутренних обьединений в запросах?). У меня на этот случай 2 класса - один осуществляет выборку сохраняя данные в классе-обретке массива(с небольшим рашсирением функционала smile ), а другой ни чего не сохраняетsmile Но они написаны на ПХП 5:)

Автор: IZ@TOP 15.5.2005, 06:41
<Spawn>, думаю данную проблему можно решить подставлением нужных ресурсов выбоки в метод получения результата (иначе на кой они нужны?).

Автор: Opik 18.5.2005, 15:34
<Spawn>
запросы объединить нельзя. Это было бы сделано smile
IZ@TOP
как? smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)