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 :: Версия для печати :: Класс для работы с БД [2]
Форумы портала PHP.SU » PHP » Пользовательские функции » Класс для работы с БД

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

16. EuGen - 18 Апреля, 2008 - 20:55:59 - перейти к сообщению
Думаю, есть смысл сделать функцию query_execute не private, а public.
Это потому, что если я хочу скажем сделать
ALTER TABLE, ANALYZE, CHECK и т.п. - запросы, относящиеся к DDL, а не к DML, мне нечем воспользоваться в этом классе, а функций на все запросы такого типа не написать (вернее, если и написать, то будет громоздко, неудобно и по факту повторять то, что уже есть в MySQL - выполнять переданный запрос).
Да и запросы DML не все можно определить при помощи функций класса.
Например, я хочу сделать
INSERT .. SELECT или вложенный запрос, или UNION или JOIN или SELECT * FROM myTable USE INDEX(myIndex) и т.п. - всего и не перечислишь
- мне опять же нечего использовать и опять же всего нельзя написать в классе.
Иначе говоря, без возможности писать запрос напрямую, класс сможет выполнять лишь самые простенькие запросы, чего может быть недостаточно (лично мне было бы очень недостаточно).
17. Eihwaz - 18 Апреля, 2008 - 21:57:03 - перейти к сообщению
Да, я уже пытался пользоваться классом в разработке, пришел к мысли, что нужно позволить пользователю писать свои запросы, убрать массивы из запросов, и т.п. Упростить, вобщем, но это была хорошая практика именно для меня, потому что я еще не особо уверенно пишу что-то. Плюс неудобно, когда функция принимает много параметров. Я, как автор, еще с грехом пополам их помню, но если этим классом будет пользоваться сторонний разработчик, то думаю, моей семье будет шибко икаться.
Так что мечта о гарантированно валидных запросах таки останется мечтой Улыбка
Вобщем, по-большому счету должны остаться такие штуки, как сам, собственно, запрос к БД, получение массива из результатов, получение объектов, numrows, и т.д. Короче, курю мануалы, завтра что-то уже будет, я думаю Улыбка

P.S.: Предыдущий вопрос насчет того, как поступать в классами статей и прочего прошу считать закрытым - вопрос был глупый, никто не мешает мне в классе статей только формировать запрос к БД, а выполнять его классом для работы с БД.
18. Eihwaz - 20 Апреля, 2008 - 18:03:00 - перейти к сообщению
Ну, вот, еще одна попытка.
Пример использования:
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.  
19. -SCHATTEN- - 25 Апреля, 2008 - 11:26:21 - перейти к сообщению
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 и т.д.
20. Eihwaz - 25 Апреля, 2008 - 14:04:27 - перейти к сообщению
-SCHATTEN- Это мы тогда возвращаемся к концепции формирования массивов для $this->select, $this->where и т.д., потому что если эти параметры будут строковыми, разработчику все-равно нужно будет руками расставлять все кавычки...
Черт, очень хочется написать подобное, но постоянно думаю об удобстве использования... Но думаю таки попробую, хотя в своей CMS сейчас использую последний выложенный класс.
Вобщем, надо думать, спасибо вам обоим за потраченное время, прокачался немного Улыбка
21. -SCHATTEN- - 25 Апреля, 2008 - 14:23:39 - перейти к сообщению
Короч быстро не обещаю, но попробую написать как будет время примерно.

 

Powered by ExBB FM 1.0 RC1