Абстрактная работа с СУБДями

tristram

Guest
Абстрактная работа с СУБДями

В PHP для работы с каждой СУБД есть отдельное семейство функций, но по назначению они похоже. Вот и я и подумал что можно сделать такое семейство функций которое бы работало с любой СУБД и не заставляло программера подстраиватся под хостера. Вероятно уже есть такие решения, подскажите пожалуйста. Очень бы хотелось чтоб код был как можно более компактным.
 

Serguitar

Новичок->продвинутый
Нечто
Конечно лучше!
Напишешь, поделись с нами, может PEAR и отдохнёт.
 

Нечто

Психолог РНРClub
Serguitar, PEAR не отдохнет. Напомню, что мы говорили о небольших библиотеках.
 

chisto_tolyan

Враг народа
tristram
а зачем велосипед плести, если уже все за нас написали?)

:ОФФТОП:
По-моему на всех(почти) хостах стоит Мускуль...иногда Постгре. А другие Бд на хостах встречаютса, как динозавры
 

Opik

Новичок
Я взялся писать всё таки свой класс доступа. но возникла одна проблема:
PHP:
<?
   class DB
  {
     var $last;
      function DB(){} // тут коннект
      function query($query)
      {
            $this->last = $query;
            return mysql_query($query);
      }
       function fetchRow()
       {
             return mysql_fetch_assoc($this->last);
       }
   }
   $db = new DB("user", "pass", "host");
   $db->query("SELECT...");
   $result = $db->fetchRow(); // если использовать так, то всё ок
  
 $db->query("SELECT...");
  while($row = $db->fetchRow())
  {
      $db->query("SELECT...
                           WHERE id = ".$row['id'].""); // к примеру
      $res[] = $db->fetchRow(); // показывается только 1 элемент первого запроса, т.е получается что запрос в цикле перебивает первый и всё падает.
  }
?>
В PEAR::DB "метод" fetchRow() реализован как отдельный класс. И получается что для каждого запроса создается свой объект. Можно ли без этого обойтись?
Подскажите пож-та как избежать возникшую проблему?
 

Gas

может по одной?
В PEAR:DB "метод" fetchRow() реализован как отдельный класс. И получается что для каждого запроса создается свой объект. Можно ли без этого обойтись?
В PEAR:DB обойтись? Нет, он так устроен.
В своем классе? конечно, что мешает.

Сделай в своём классе метод fetchAll()
 

Opik

Новичок
Нет, не в пеар, а в своем. знаю, что можно, мешает то, что не знаю как.
 

yugene

Отошел от дел
Автор оригинала: Opik
Я взялся писать всё таки свой класс доступа. но возникла одна проблема:
PHP:
while($row = $db->fetchRow())
  {
      $db->query("SELECT...
                           WHERE id = ".$row['id'].""); // к примеру
      $res[] = $db->fetchRow(); // показывается только 1 элемент первого запроса, т.е получается что запрос в цикле перебивает первый и всё падает.
}
ты не передаешь, из результата какого запроса надо фетчить

Автор оригинала: chisto_tolyan
А другие Бд на хостах встречаютса, как динозавры
А у меня на хосте (не хостинге!) встречаются как MySql, так и MsSql, и Oracle.
 

Opik

Новичок
yugene
ну так как это сделать? то что я не передаю, это я и так знаю, знал бы - передал бы :)
в пеар сделано так:
PHP:
$query = $db->query("Select..");
$result = $query->fetchRow();
но как такого добится я не знаю...
 

kvf77

Red Devil
Может тебе просто прекратить глупое занятие написание своего класса? Ты хочешь тут какждый день по пять затычек обсуждать? Детский сад, блин. Писать то, на что у тебя не хватает знаний.
 

Opik

Новичок
kvf77
А ты сразу всё выучил? моментом?
да, я не знаю как сделать.
да, я не гуру как Вы, о Великие!
но Я ХОЧУ НАУЧИТСЯ. если бы не хотел, я бы не писал сюда. Причем я не тупо написал сюда как это сделать, до этого я посмотрел как это в пеаре, посмотрел другие классы (но реализацию увидел только в пеаре). Но PEAR пока слишком сложный для меня (в плане ООП), и мне пока сложновато. Я не думаю (хотя может так и было), что когда ты учился тебе не, кричали "RTFM"... хотя если был бы фак на эту тему, я бы лучше его почитал, чем на форум писать(чему вы так усердно и учите.)
 

kvf77

Red Devil
Я говорил не о том - учиться не вредно и полезно, но то, что спрашиваешь ты - это не учеба - это перерастет в обычный флем, в котором будут обсуждать все подряд.
 

yugene

Отошел от дел
Автор оригинала: Opik
то что я не передаю, это я и так знаю, знал бы - передал бы :)
Так "это я и так знаю" или "знал бы - передал бы"? :)

Общая схема примерно такова:

$sql = "SELECT...";
$result = $DB->query($query);
$row = $DB->fetch($result);
 
Сверху