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 and singleton

 PHP.SU

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


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

> Описание: mysqli and singleton
medensev
Отправлено: 24 Июня, 2013 - 12:54:11
Post Id



Новичок


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


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




Не подскажите почему не работает этот код? и как с ним работать?

PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. class DbConn {
  4.     const DB_HOST = 'localhost';
  5.     const DB_USER = 'root';
  6.     const DB_PASS = 'pw';
  7.     const DB_NAME = 'db';
  8.  
  9.     static private $instance = NULL;
  10.     private $_db;
  11.  
  12.     static function getInstance()
  13.     {
  14.       if (self::$instance == NULL)
  15.       {
  16.         self::$instance = new DbConn();
  17.         if(mysqli_connect_errno()) {
  18.             throw new Exception("Database connection failed: ".mysqli_connect_error());
  19.         }
  20.       }
  21.       return self::$instance;
  22.     }
  23.  
  24.     private function __construct()
  25.     {
  26.         $this->_db = new mysqli(self::DB_HOST, self::DB_USER, self::DB_PASS, self::DB_NAME) or die('Couldnt connect');
  27.     }
  28.  
  29.     private function __clone() {}
  30.  
  31. }
  32.  
  33. DbConn::getInstance()->query();
  34.  
  35. ?>
  36.  


Может у кого есть лучше вариант который работает?
 
 Top
DelphinPRO
Отправлено: 24 Июня, 2013 - 13:07:13
Post Id



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


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


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




очевидно потому, что у класса DbConn отсутствует метод query()
вы же его не описали...


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
vanicon
Отправлено: 24 Июня, 2013 - 13:07:45
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


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




PHP:
скопировать код в буфер обмена
  1. <?
  2. class DbConn {
  3.     const DB_HOST = 'localhost';
  4.     const DB_USER = 'root';
  5.     const DB_PASS = 'pw';
  6.     const DB_NAME = 'db';
  7.  
  8.     static private $instance = NULL;
  9.     private $_db;
  10.  
  11.     static function getInstance()
  12.     {
  13.       if (self::$instance == NULL)
  14.       {
  15.         self::$instance = new mysqli(self::DB_HOST, self::DB_USER, self::DB_PASS, self::DB_NAME);
  16.         if(mysqli_connect_errno()) {
  17.             throw new Exception("Database connection failed: ".mysqli_connect_error());
  18.         }
  19.       }
  20.       return self::$instance;
  21.     }
  22.  
  23.     private function __construct(){ }
  24.  
  25.     private function __clone() {}
  26.  
  27. }
  28.  
  29. DbConn::getInstance()->query();
  30.  
  31. ?>


-----
Так было, так есть и так будет
 
 Top
medensev
Отправлено: 24 Июня, 2013 - 13:16:38
Post Id



Новичок


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


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




vanicon, выдает ошибку Call to undefined method DbConn::query() on line 29


DelphinPRO пишет:

очевидно потому, что у класса DbConn отсутствует метод query()
вы же его не описали...


Как можно исправить?

Напишите пожалуйста правильный вариант
 
 Top
vanicon
Отправлено: 24 Июня, 2013 - 13:23:15
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


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




getInstance должен возвращать объект mysqli, что по идее я и исправил в вашем коде, попробуйте сначала сделать var_dump(DbConn::getInstance());


-----
Так было, так есть и так будет
 
 Top
medensev
Отправлено: 24 Июня, 2013 - 13:28:31
Post Id



Новичок


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


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




vanicon,
Можете для примера показать вывод из бд на этой же страницы кода?
 
 Top
OrmaJever Модератор
Отправлено: 24 Июня, 2013 - 13:31:06
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




Синглтон можно сделать и с обычной функцией.
PHP:
скопировать код в буфер обмена
  1. function mysqli()
  2. {
  3.         static $mysqli;
  4.         if(is_null($mysqli)) {
  5.                 $mysqli = new _mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
  6.                 $mysqli->query('SET NAMES utf8');
  7.         }
  8.    return $mysqli;
  9. }
  10. mysqli()->query('...');
  11.  


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
vanicon
Отправлено: 24 Июня, 2013 - 13:32:03
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


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




PHP:
скопировать код в буфер обмена
  1. DbConn::getInstance()->query('SELECT * FROM `table`');

Что вывел var_dump?


-----
Так было, так есть и так будет
 
 Top
DelphinPRO
Отправлено: 24 Июня, 2013 - 13:33:33
Post Id



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


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


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




vanicon пишет:
getInstance должен возвращать объект mysqli,

ну и какой смысл городить тогда целый класс Улыбка

PHP:
скопировать код в буфер обмена
  1. function db() {
  2.   static $db;
  3.   if (is_null($db)) {
  4.     $db = new mysqli(....);
  5.   }
  6.   return $db;
  7. }


запрос

PHP:
скопировать код в буфер обмена
  1. db()->query('DELETE FROM users');


возвращает объект mysqli, следовательно можно использовать все имеющиеся в нем методы.

коротко, просто и сердито.
(Добавление)

мда, не успел первым, заезженная функция на этом форуме Улыбка
не хотят люди поиском пользоваться...


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
medensev
Отправлено: 24 Июня, 2013 - 13:39:53
Post Id



Новичок


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


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




vanicon, Да большое спасибо, ошибку не выдал.

А как теперь к примеру вывести из таблице данные с помощью echo ?
 
 Top
vanicon
Отправлено: 24 Июня, 2013 - 13:43:31
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


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






-----
Так было, так есть и так будет
 
 Top
medensev
Отправлено: 24 Июня, 2013 - 13:44:01
Post Id



Новичок


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


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




DelphinPRO Спасибо за ответ, DbConn::getInstance()->query(); понравилось вот таким способом Улыбка
 
 Top
DelphinPRO
Отправлено: 24 Июня, 2013 - 13:46:57
Post Id



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


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


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





medensev пишет:
DbConn::getInstance()->query(); понравилось вот таким способом

конечно! Это же ООП! Голливудская улыбка


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
vanicon
Отправлено: 24 Июня, 2013 - 13:53:37
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 808
Дата рег-ции: Янв. 2010  
Откуда: Самара


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





DelphinPRO пишет:
конечно! Это же ООП!
Без ООП нынче никуда, это модно и круто сейчас, хоть бери и функции в классы заворачивай Радость


-----
Так было, так есть и так будет
 
 Top
medensev
Отправлено: 24 Июня, 2013 - 15:11:45
Post Id



Новичок


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


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




Ребят, спасибо большое! вот сижу разбираюсь)
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB