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 :: Вызов PDO в классе

 PHP.SU

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


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

> Без описания
OverNik
Отправлено: 07 Июня, 2012 - 00:32:05
Post Id



Частый гость


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


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




При выполнении:
PHP:
скопировать код в буфер обмена
  1.  
  2. <?
  3. global $db;
  4. try {
  5. $db = new PDO('mysql:host=localhost;dbname=cms', 'root', '');
  6. } catch (PDOException $e) {
  7. echo $e->getMessage();
  8. }
  9.  
  10.  
  11.  
  12. Class UserAction{
  13.      
  14.      
  15.    
  16.     function EnterToSIte($login, $psw){
  17.         if(empty($login) or empty($psw)){return "Увидетите пожалуйста логин или пароль";}
  18.          
  19.          $sql = "SELECT * FROM `users_list` WHERE `login` = '".$login."' LIMIT 1";
  20.          
  21.          $user = $db->query($sql);
  22.          
  23.          if($user['psw'] != $psw){
  24.              return "Вы ввели не правельный пароль";
  25.          }else{
  26.              return "ОК";
  27.          }
  28.        
  29.     }
  30.    
  31. }
  32.  
  33.  
  34. ?>
  35.  
  36. <form action="?" method="post">
  37. <input type="text" name="login"><br>
  38. <input type="password" name="psw"><br>
  39. <input type="submit" value="ввойти">
  40. <br>
  41. <?
  42.     $c = new UserAction();
  43.     echo $c::EnterToSIte($_POST['login'],$_POST['psw']);
  44. ?>
  45.  

вылазит: Fatal error: Call to a member function query() on a non-object in Z:\home\cms\www\index.php on line 20

(Отредактировано автором: 07 Июня, 2012 - 00:39:02)

 
 Top
OrmaJever Модератор
Отправлено: 07 Июня, 2012 - 00:43:27
Post Id



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


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


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




global используется для того что бы найти переменую в глобальной области, уберите её с начала и вставьте в метод где нужна переменая $db.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
OverNik
Отправлено: 07 Июня, 2012 - 00:49:28
Post Id



Частый гость


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


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




OrmaJever, Спасибо! Помогло...
А вот вопрос ещё один. Правельно ли будет при каждном методе делать подключения PDO, ведь на сколько я знаю глобальный переменные не есть хорошо!? Или я ошибаюсь?

(Отредактировано автором: 07 Июня, 2012 - 00:49:57)

 
 Top
caballero
Отправлено: 07 Июня, 2012 - 01:00:04
Post Id


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


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


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




Цитата:
Правельно ли будет при каждном методе делать подключения PDO, ведь на сколько я знаю глобальный переменные не есть хорошо!? Или я ошибаюсь?

Вобщем нехорошо но в данном случае оправдано.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
Okula
Отправлено: 07 Июня, 2012 - 07:05:30
Post Id



Участник


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


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




Создай класс синглтон и вызывай его тогда когда нужно получить ссылку на подключение. Так и множественных подключений к базе не будет.
 
 Top
OrmaJever Модератор
Отправлено: 07 Июня, 2012 - 09:28:07
Post Id



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


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


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




OverNik пишет:
А вот вопрос ещё один. Правельно ли будет при каждном методе делать подключения PDO, ведь на сколько я знаю глобальный переменные не есть хорошо!? Или я ошибаюсь?

Да, поиск в глобальной области забирает много ресурсов.
caballero пишет:
Вобщем нехорошо но в данном случае оправдано.

Чем оправдано?
PHP:
скопировать код в буфер обмена
  1. function PDO()
  2. {
  3. static $db;
  4. if(is_null($mysqli))
  5.    $db = new PDO('mysql:host=localhost;dbname=cms', 'root', '');
  6. return $db;
  7. }

Везьде в коде место переменой $db используем функцию.
PHP:
скопировать код в буфер обмена
  1. PDO()->query( ... );
  2. PDO()->close( ... );

ну и т.д.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Мелкий Супермодератор
Отправлено: 07 Июня, 2012 - 09:30:59
Post Id



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


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


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




OverNik пишет:
Правельно ли будет при каждном методе делать подключения PDO, ведь на сколько я знаю глобальный переменные не есть хорошо!? Или я ошибаюсь?

Не хорошо, но подключения к базе на каждый чих - значительно хуже.
Если данные нужны действительно всей программе - глобальные переменные уместны. Для веба, в частности, глобальными переменными часто являются юзер и соединение с базой.
Синглтон, по большому счёту, - тоже глобальная переменная. Но чуть опрятнее, т.к. в глобальной области видимости не болтается лишняя переменная.


-----
PostgreSQL DBA
 
 Top
caballero
Отправлено: 07 Июня, 2012 - 10:28:31
Post Id


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


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


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




Цитата:
Чем оправдано?

Уровнем знаний ТС.
Понятно что лучше всего использовать статику или вообще синглетон.
ТС нужно решить задачу, через простой глобал она решается проще и понятнее для него.


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
OverNik
Отправлено: 18 Августа, 2012 - 01:02:32
Post Id



Частый гость


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


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




OrmaJever пишет:
Спасибо, метод с функцией подходит на ура!!!


Спасибо всем, прошу прощения за такие не уклюжие вопросы
 
 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