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 :: Класс для работы с БД [2]

 PHP.SU

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


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

> Без описания
EuGen Администратор
Отправлено: 18 Апреля, 2008 - 20:55:59
Post Id


Профессионал


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


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




Думаю, есть смысл сделать функцию query_execute не private, а public.
Это потому, что если я хочу скажем сделать
ALTER TABLE, ANALYZE, CHECK и т.п. - запросы, относящиеся к DDL, а не к DML, мне нечем воспользоваться в этом классе, а функций на все запросы такого типа не написать (вернее, если и написать, то будет громоздко, неудобно и по факту повторять то, что уже есть в MySQL - выполнять переданный запрос).
Да и запросы DML не все можно определить при помощи функций класса.
Например, я хочу сделать
INSERT .. SELECT или вложенный запрос, или UNION или JOIN или SELECT * FROM myTable USE INDEX(myIndex) и т.п. - всего и не перечислишь
- мне опять же нечего использовать и опять же всего нельзя написать в классе.
Иначе говоря, без возможности писать запрос напрямую, класс сможет выполнять лишь самые простенькие запросы, чего может быть недостаточно (лично мне было бы очень недостаточно).


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
Eihwaz
Отправлено: 18 Апреля, 2008 - 21:57:03
Post Id


Гость


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


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




Да, я уже пытался пользоваться классом в разработке, пришел к мысли, что нужно позволить пользователю писать свои запросы, убрать массивы из запросов, и т.п. Упростить, вобщем, но это была хорошая практика именно для меня, потому что я еще не особо уверенно пишу что-то. Плюс неудобно, когда функция принимает много параметров. Я, как автор, еще с грехом пополам их помню, но если этим классом будет пользоваться сторонний разработчик, то думаю, моей семье будет шибко икаться.
Так что мечта о гарантированно валидных запросах таки останется мечтой Улыбка
Вобщем, по-большому счету должны остаться такие штуки, как сам, собственно, запрос к БД, получение массива из результатов, получение объектов, numrows, и т.д. Короче, курю мануалы, завтра что-то уже будет, я думаю Улыбка

P.S.: Предыдущий вопрос насчет того, как поступать в классами статей и прочего прошу считать закрытым - вопрос был глупый, никто не мешает мне в классе статей только формировать запрос к БД, а выполнять его классом для работы с БД.
 
 Top
Eihwaz
Отправлено: 20 Апреля, 2008 - 18:03:00
Post Id


Гость


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


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




Ну, вот, еще одна попытка.
Пример использования:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3. $db = new database;
  4. $sql = 'SELECT * FROM `administrators` WHERE `user_name` = \'test\'';
  5. $db->make_query($sql);
  6. $array = $db->fetch_array_lim(MYSQL_ASSOC);
  7. print_r($array);
  8. $db->show_errors();
  9. ?>
  10.  

Скачать файл: db_class3.php.tar.gz
Скачан раз: 353
 
 Top
-SCHATTEN-
Отправлено: 25 Апреля, 2008 - 11:26:21
Post Id



Пользователь


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


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




Eihwaz пишет:
Так что мечта о гарантированно валидных запросах таки останется мечтой

Не факт. В 5-й версии языка есть очень интересное свойство объектной модели. Оно позволяет работать с тем что возвращается методом. например :

PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. class database
  4. {
  5.         private $select = NULL;
  6.         private $where = NULL;
  7.         public function  __construct() {
  8.                 //connecting to databse, selecting table
  9.         }
  10.        
  11.         public function query( $sql ) {
  12.                 //executing query
  13.         }
  14.        
  15.         public function select( $feilds ) {
  16.                 //operations
  17.                 return $this;
  18.         }
  19.        
  20.         public function where( $where ) {
  21.                 //operations
  22.                 return $this;
  23.         }
  24.        
  25.         public function exec() {
  26.                 $sql = "SELECT ".$this->select;
  27.                 if ( !is_null($this->where) ) {
  28.                         $sql .= "WHERE ".$this->where;
  29.                 }
  30.                 mysql_query( $sql );
  31.         }
  32.        
  33. }
  34. ?>
  35.  


В итоге можно использовать вот так :

PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. $database = new database();
  4. $database->select( params ) // тут возвращается обект базы данных
  5.                ->where( params )
  6.                ->exec(); //выполняем запрос
  7. ?>
  8.  

(Добавление)
Это я примерно написал как можно использовать классы в PHP 5. Так что ошибки искать нестоит, идею поймите ;)
(Добавление)
Точно так же можно делать с такими вещами как limit, join и т.д.
 
 Top
Eihwaz
Отправлено: 25 Апреля, 2008 - 14:04:27
Post Id


Гость


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


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




-SCHATTEN- Это мы тогда возвращаемся к концепции формирования массивов для $this->select, $this->where и т.д., потому что если эти параметры будут строковыми, разработчику все-равно нужно будет руками расставлять все кавычки...
Черт, очень хочется написать подобное, но постоянно думаю об удобстве использования... Но думаю таки попробую, хотя в своей CMS сейчас использую последний выложенный класс.
Вобщем, надо думать, спасибо вам обоим за потраченное время, прокачался немного Улыбка
 
 Top
-SCHATTEN-
Отправлено: 25 Апреля, 2008 - 14:23:39
Post Id



Пользователь


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


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




Короч быстро не обещаю, но попробую написать как будет время примерно.
 
 Top
Страниц (2): « 1 [2]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Пользовательские функции »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB