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
Форумы портала PHP.SU :: Версия для печати :: Вызов PDO в классе
Форумы портала PHP.SU » » Объектно-ориентированное программирование » Вызов PDO в классе

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

1. OverNik - 07 Июня, 2012 - 00:32:05 - перейти к сообщению
При выполнении:
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
2. OrmaJever - 07 Июня, 2012 - 00:43:27 - перейти к сообщению
global используется для того что бы найти переменую в глобальной области, уберите её с начала и вставьте в метод где нужна переменая $db.
3. OverNik - 07 Июня, 2012 - 00:49:28 - перейти к сообщению
OrmaJever, Спасибо! Помогло...
А вот вопрос ещё один. Правельно ли будет при каждном методе делать подключения PDO, ведь на сколько я знаю глобальный переменные не есть хорошо!? Или я ошибаюсь?
4. caballero - 07 Июня, 2012 - 01:00:04 - перейти к сообщению
Цитата:
Правельно ли будет при каждном методе делать подключения PDO, ведь на сколько я знаю глобальный переменные не есть хорошо!? Или я ошибаюсь?

Вобщем нехорошо но в данном случае оправдано.
5. Okula - 07 Июня, 2012 - 07:05:30 - перейти к сообщению
Создай класс синглтон и вызывай его тогда когда нужно получить ссылку на подключение. Так и множественных подключений к базе не будет.
6. OrmaJever - 07 Июня, 2012 - 09:28:07 - перейти к сообщению
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( ... );

ну и т.д.
7. Мелкий - 07 Июня, 2012 - 09:30:59 - перейти к сообщению
OverNik пишет:
Правельно ли будет при каждном методе делать подключения PDO, ведь на сколько я знаю глобальный переменные не есть хорошо!? Или я ошибаюсь?

Не хорошо, но подключения к базе на каждый чих - значительно хуже.
Если данные нужны действительно всей программе - глобальные переменные уместны. Для веба, в частности, глобальными переменными часто являются юзер и соединение с базой.
Синглтон, по большому счёту, - тоже глобальная переменная. Но чуть опрятнее, т.к. в глобальной области видимости не болтается лишняя переменная.
8. caballero - 07 Июня, 2012 - 10:28:31 - перейти к сообщению
Цитата:
Чем оправдано?

Уровнем знаний ТС.
Понятно что лучше всего использовать статику или вообще синглетон.
ТС нужно решить задачу, через простой глобал она решается проще и понятнее для него.
9. OverNik - 18 Августа, 2012 - 01:02:32 - перейти к сообщению
OrmaJever пишет:
Спасибо, метод с функцией подходит на ура!!!


Спасибо всем, прошу прощения за такие не уклюжие вопросы

 

Powered by ExBB FM 1.0 RC1