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]   

> Без описания
laggerok
Отправлено: 09 Апреля, 2012 - 18:25:42
Post Id


Новичок


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


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




Есть класс, в нем определено допустим 10 функций. В каждой идем коннект к mySQLi таком образом через объектный подход.

PHP:
скопировать код в буфер обмена
  1. class User {
  2.             ...
  3.             function check() {
  4.                     $sqldb = new mysqli(...);
  5.                     $result = $sqldb->query("select ...") ;
  6.             };
  7.             ...
  8. }


Проблема в том, что таков класс не один и каждый раз вызывать функцию соединения с БД и делать Select далеко не вариант.
Подскажите, как реализовать один раз коннект, и в функциях класса просто делать запрос?
 
 Top
OrmaJever Модератор
Отправлено: 09 Апреля, 2012 - 20:53:03
Post Id



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


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


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




Зделать функцию синглтона и где нужен обьект mysqli вызывать её.
PHP:
скопировать код в буфер обмена
  1. function mysqli() {
  2.    static $mysqli;
  3.    if(is_null($mysqli)) $mysqli = new mysqli(...);
  4.    return $mysqli;
  5. }
  6. $mysqli = mysqli();


Можно зделать приватным методом этого класса


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
laggerok
Отправлено: 10 Апреля, 2012 - 01:13:13
Post Id


Новичок


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


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




В данном случае почему-то ругается на Call to undefined function mysqli().

А нельзя ли как-то сделать типа:

PHP:
скопировать код в буфер обмена
  1. class User {
  2.         private static $mysqli;
  3.  
  4.         function __construct() {
  5.                   if(is_null($mysqli)) $mysqli = new mysqli("...");
  6.                   if (mysqli_connect_errno()) {
  7.                 echo "Ошибка соединения с Базой Данных: ".mysqli_connect_error();
  8.                 exit();
  9.             }
  10.         }
  11.         function user_check() {
  12.                   $result = $mysqli->query(...);
  13.         }
  14. }


Как я понимаю, тут конструктор начинает работать с локальной переменной @mysqli. А как заставить его сохранить коннект в private static $mysqli?
(Добавление)
А я кажется нашел решение через статическую переменную класса.
Не знаю, насколько это правильно или нет, но все же.

PHP:
скопировать код в буфер обмена
  1. class User {
  2.         private static $mysqli;
  3.  
  4.         function __construct(){
  5.                 if(is_null(self::$mysqli)) self::$mysqli = new mysqli("...");
  6.                 if (mysqli_connect_errno()) {
  7.                 echo "Ошибка соединения с Базой Данных: ".mysqli_connect_error();
  8.                 exit();
  9.         }
  10. }
  11.  
  12.         function userCheck () {
  13.                 $result = self::$mysqli->query(...);
  14. }
  15.  

(Отредактировано автором: 10 Апреля, 2012 - 01:13:34)

 
 Top
OrmaJever Модератор
Отправлено: 10 Апреля, 2012 - 01:48:59
Post Id



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


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


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




Да это правельно, так и должно быть.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
laggerok
Отправлено: 10 Апреля, 2012 - 01:56:23
Post Id


Новичок


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


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




А если тогда объявить



То как обратится к этой переменной из другого файла?
 
 Top
OrmaJever Модератор
Отправлено: 10 Апреля, 2012 - 02:15:56
Post Id



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


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


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




User::$mysqli
Но почемуто я сомневаюсь что нужен имено метод... Тогда уж лучше функцию зделать если вы собираетесь вызывать её везьде. Хотя с функцией даже правельно будет, конект должен быть только один.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 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