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 :: Подключение к бд (mysqli)

 PHP.SU

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


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

> Без описания
Vaio
Отправлено: 20 Июня, 2013 - 13:58:04
Post Id


Гость


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


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




Есть такой клас:
PHP:
скопировать код в буфер обмена
  1. class Sql extends mysqli{
  2.     private $db_host    ='localhost';
  3.     private $db_login   ='user';  
  4.     private $db_password='pass';
  5.     private $db_table   ='table';
  6.  
  7.  
  8.     public
  9.     function __construct(){
  10.         parent::__construct($this->db_host, $this->db_login, $this->db_password, $this->db_table);
  11.  
  12.         if (mysqli_connect_error()) {
  13.             die('Ошибка подключения (' . mysqli_connect_errno() . ') '
  14.                     . mysqli_connect_error());
  15.         }
  16.     }
  17. }

Когда мне нужно выполнить запрос я пишу:



При этом как я понимаю каждый раз создается новое подключение к бд и если я в разных классах буду так делать - это лишняя трата время и ресурсов. Как можно 1 раз подключиться и потом обращаться к sql из других классов?
 
 Top
EuGen Администратор
Отправлено: 20 Июня, 2013 - 14:01:33
Post Id


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


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


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




Можно и нужно. Для соединения с БД одним из вариантов является Singleton


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
avtor.fox
Отправлено: 20 Июня, 2013 - 14:01:54
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


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




синглосинтезированный тон

PHP:
скопировать код в буфер обмена
  1. function sql()
  2. {
  3.     static $Obj;
  4.     return is_null($Obj) ? new mylsqi() : $Obj;
  5. }
 
 Top
Vaio
Отправлено: 20 Июня, 2013 - 14:08:03
Post Id


Гость


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


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




avtor.fox это мне добавить в мой клас Sql?
 
 Top
DelphinPRO
Отправлено: 20 Июня, 2013 - 14:09:33
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


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




avtor.fox пишет:
return is_null($Obj) ? new mylsqi() : $Obj;

косяк Улыбка всегда будет создаваться новый объект
(Добавление)
Vaio пишет:
это мне добавить в мой клас Sql?

классический синглтон на php:
PHP:
скопировать код в буфер обмена
  1. class Sql extends mysqli{
  2.  
  3.     private $db_host    ='localhost';
  4.     private $db_login   ='user';  
  5.     private $db_password='pass';
  6.     private $db_table   ='table';
  7.  
  8.     // Здесь храним объект, из вне недоступно
  9.     // получаем только через статический метод
  10.     private static $instance;
  11.  
  12.     // Получаем объект
  13.     public static function getInstance(){
  14.         // Если еще не создан - создать
  15.         if (is_null(self::$instance)) {
  16.             self::$instance = new self();
  17.         }
  18.         // Возвращаем готовый объект
  19.         return self::$instance;
  20.     }
  21.  
  22.     // Модификатор private - чтобы нельзя было создать еще один объект
  23.     // конструкцией new Sql();
  24.     private function __construct(){
  25.         parent::__construct($this->db_host, $this->db_login, $this->db_password, $this->db_table);
  26.  
  27.         if (mysqli_connect_error()) {
  28.             die('Ошибка подключения (' . mysqli_connect_errno() . ') '
  29.                     . mysqli_connect_error());
  30.         }
  31.     }
  32.  
  33.    
  34.     // Модификатор private - чтобы нельзя было создать еще один объект
  35.     // конструкцией clone($db);
  36.     private function __clone(){}
  37.     // Модификатор private - чтобы нельзя было создать еще один объект
  38.     // конструкцией unserialize($db);
  39.     private function __wakeup(){}
  40. }


когда нужен объек БД получаем его так



Он создан будет лишь один раз, потом будет возвращаться уже готовый объект


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
avtor.fox
Отправлено: 20 Июня, 2013 - 14:26:21
Post Id



Постоянный участник


Покинул форум
Сообщений всего: 2083
Дата рег-ции: Март 2012  
Откуда: Воронеж


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




DelphinPRO, точно Огорчение
 
 Top
Vaio
Отправлено: 21 Июня, 2013 - 00:33:12
Post Id


Гость


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


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




А как вариант можно ещё сделать global $sql?
Тогда вроде можно только 1 раз прописать global $sql и в каждом классе не нужно будет писать $db = Sql::getInstance();. Или в классах global не будет работать?
 
 Top
esterio
Отправлено: 21 Июня, 2013 - 01:02:53
Post Id



Активный участник


Покинул форум
Сообщений всего: 5025
Дата рег-ции: Нояб. 2012  
Откуда: Украина, Львов


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




запомните одну вещь - global зло. описаний выше синглтон именно то что нужно
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB