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 :: Не видится статичный класс подключения к бд

 PHP.SU

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


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

> Без описания
3d_killer
Отправлено: 16 Сентября, 2014 - 14:54:17
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


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




Попробовал сделать класс для работы с PDO чтобы избавиться от глобальной переменной выдает ошибку: Fatal error: Call to a member function prepare() on a non-object in....
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. class sql
  4. {
  5.     public static $db = false;
  6.     private $host = '127.0.0.1';
  7.     private $user = 'root';
  8.     private $pass = '';
  9.     private $dbname = 'cms';
  10.     function __construct()
  11.     {
  12.         if (self::$db === false) {
  13.             $this->connect();
  14.         }
  15.     }
  16.     private function connect()
  17.     {
  18.         try
  19.                         {
  20.                                 self::$db = new PDO(sprintf("mysql:host=%s;dbname=%s", $host, $dbname), $user, $pass);
  21.                                 self::$db ->query("SET NAMES \'utf8\'");        //Выставляем кодировку
  22.                 self::$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  23.                 }
  24.                 catch (PDOException $e)
  25.                         {
  26.                 //your log handler
  27.                 }
  28.     }
  29. }
  30. $q = sql::$db->prepare("SELECT * FROM system_users");
  31. ?>
  32.  

Взято отсюда: http://simple_pdo_implementation[dot][dot][dot]hpfunctions[dot]com/

Помогите разобраться
 
My status
 Top
Мелкий Супермодератор
Отправлено: 16 Сентября, 2014 - 15:06:39
Post Id



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


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


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




Так а connect вызывать кто будет?
Сделайте классический Singleton


-----
PostgreSQL DBA
 
 Top
3d_killer
Отправлено: 16 Сентября, 2014 - 15:08:36
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


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




Не найдется примерчика?
(Добавление)
в конструкторе вызван конект
 
My status
 Top
RickMan
Отправлено: 16 Сентября, 2014 - 15:11:53
Post Id


Участник


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


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




Конструктор не вызывается при выхове статичных методов и свойств.
 
 Top
3d_killer
Отправлено: 16 Сентября, 2014 - 15:12:36
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


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




ну я вобще со статическими не работал вот и прошу помощи
 
My status
 Top
RickMan
Отправлено: 16 Сентября, 2014 - 15:15:50
Post Id


Участник


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


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




http://labaka[dot]ru/tools/obyortka-[dot][dot][dot]lya-raboty-s-pdo - воспользуйся лучше чем-то подобным...
 
 Top
3d_killer
Отправлено: 16 Сентября, 2014 - 15:20:23
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


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




и чем эта обертка мне поможет если я хочу избавиться от глобальной переменной? при чем тут это?
 
My status
 Top
RickMan
Отправлено: 16 Сентября, 2014 - 15:29:53
Post Id


Участник


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


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




А от какой глобальной переменной ты избавиться хочешь? Через статику если хочешь обращаться то от силы что у тебя выйдет, это при каждом запросе создавать снова подключение (но это обращатсья надо не к статичному свойству, а методу)... на то оно и статика. И что вы выйграешь в итоге? Минуc 1 глобальная переменна, но в замен кучу коннектов к БД при вызове одного скрипта?

(Отредактировано автором: 16 Сентября, 2014 - 15:31:33)

 
 Top
3d_killer
Отправлено: 16 Сентября, 2014 - 15:33:21
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


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




мне нужно чтобы экземпляр PDO виден был везде разве такого сделать нельзя с одним коннектом?
 
My status
 Top
Sail
Отправлено: 16 Сентября, 2014 - 15:42:51
Post Id



Участник


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


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




3d_killer,
Мелкий пишет:
Сделайте классический Singleton

Примерчиков singleton'а масса!
Вот примерчик из википедии:
PHP:
скопировать код в буфер обмена
  1. <?PHP
  2.  class Singleton {
  3.     private static $instance;  // экземпляра объекта
  4.     private function __construct(){ /* ... @return Singleton */ }  // Защищаем от создания через new Singleton
  5.     private function __clone()    { /* ... @return Singleton */ }  // Защищаем от создания через клонирование
  6.     private function __wakeup()   { /* ... @return Singleton */ }  // Защищаем от создания через unserialize
  7.     public static function getInstance() {    // Возвращает единственный экземпляр класса. @return Singleton
  8.         if ( empty(self::$instance) ) {
  9.             self::$instance = new self();
  10.         }
  11.         return self::$instance;
  12.     }
  13.     public function doAction() { /* ... */ }
  14.  }
  15.  Singleton::getInstance()->doAction(); // Применение
  16. ?>

(Отредактировано автором: 16 Сентября, 2014 - 15:44:26)

 
 Top
3d_killer
Отправлено: 16 Сентября, 2014 - 15:49:17
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


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




ага то есть тут не будет создаваться новые подключения?
 
My status
 Top
RickMan
Отправлено: 16 Сентября, 2014 - 15:51:33
Post Id


Участник


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


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




Да, потому что экземляр будет единственный...
 
 Top
Sail
Отправлено: 16 Сентября, 2014 - 15:52:31
Post Id



Участник


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


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




3d_killer пишет:
ага то есть тут не будет создаваться новые подключения?

Всё в Ваших руках! Улыбка
 
 Top
3d_killer
Отправлено: 16 Сентября, 2014 - 15:55:43
Post Id



Участник


Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011  
Откуда: Ростов-на-Дону


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




RickMan, а вы вот сами себе противоречите если прочитать последние 2 сообщения
(Добавление)
вобщем я понял что как и зачем так что всем спасибо, лучше уж пропишу global одной переменной чем городить такую обертку
 
My status
 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