Форум программистов, компьютерный форум, киберфорум
Наши страницы

PHP: базы данных

Войти
Регистрация
Восстановить пароль
 
Sluchayno
30 / 30 / 11
Регистрация: 22.09.2013
Сообщений: 311
#1

PDO авторизация - PHP БД

03.12.2017, 17:52. Просмотров 304. Ответов 3
Метки нет (Все метки)

Здравствуйте, помогите справится со следующей проблемой.
Написал класс для подключения к бд PDO и выполнения SQL запросов

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
class BaseModule    
{
    private $db;
    
    public function __construct()
    {
        global $host;
        global $base;
        global $user;
        global $pass;
        global $secret_key;
        
        try
        {
            $this->db = new PDO('mysql:host='.$host.'; dbname='.$base.'', $user, $pass);
            $this->db->exec("SET NAMES UTF8");
        }
        catch (PDOException $e) 
        {
            die ('База данных временно недоступна '.$e);       
        }
        
    }       
    public function __get($value)
    {
        if ($value=='db')
            return $this->db;
        return NULL;
    }
    
    //Вставляем SQL запрос
    protected function insertSql($text, $param)
    {
        try
        {
            $sql = $this->db->prepare($text);
            for ($i = 1; $i <= count($param); $i++) 
            {
                $sql->bindParam($i, $param[$i], PDO::PARAM_STR);
            }
            return $sql->execute();
        }
        catch (PDOException  $ex) 
        {
            echo "Ошибка работы базы данных ".$ex;
        }
   }
    
    //Запросы в базу данных
    protected function sqlQuery($text, $param)
    {
        try
        {
            $sql = $this->db->prepare($text);
            for ($i = 1; $i <= count($param); $i++) 
            {
                $sql->bindParam($i, $param[$i], PDO::PARAM_STR);
            }
            $sql->execute();
            return $sql->fetch();
        }
        catch (PDOException  $ex) 
        {
            echo "Ошибка работы базы данных ".$ex;
        }
    }
}
?>
Теперь создаю экземпляр объекта класса который наследуется от BaseModule

PHP
1
2
3
include_once ('BaseModule.php');
 
$auth = new auth($_GET);
И код самого класса авторизации

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Class Auth extends BaseModule
{
    public function __construct($get)
    {
        $param[1] = $get["login"];
        $param[2] = md5($get["password"]);
        
        $result = j$this->checkAuth($param);
}
//Проверяем аутентификацию пользователя
    private function checkAuth($param)
{
$result = $this->sqlQuery("select count(*), id from users where `login` = '?' and `password` = '?'", $param);
return $result['count(*)']
}
 
}

В итоге получаю ошибку

PHP
1
Fatal error: Call to a member function prepare() on a non-object in BaseModule.php on line 55
Если же изменить класс Auth следующим образом то все работает

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
include_once ('BaseModule.php');
 
$auth = new auth($_GET);
 
Class Auth extends BaseModule
{
public function getMethod($get)
    {
        $param[1] = $get["login"];
        $param[2] = md5($get["password"]);
        
        $result = $this->checkAuth($param);
}
}
Вопрос, почему при вызове из конструктора $this->checkAuth($param) не работает а при вызове из функции все срабатывает?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2017, 17:52
Я подобрал для вас темы с готовыми решениями и ответами на вопрос PDO авторизация (PHP БД):

PDO - PHP БД
Я уже довольно долгое время использую это расширение в своих проектах и наработках. Так долго, что о стандартных функциях уже и позабыл......

PDO - PHP БД
Всем привет, нашёл готовый PDO класс но вот не могу разобраться как сделать определённый запрос &lt;?php /** * Thin PDO Wrapper: A...

PDO и IN - PHP БД
Как в PDO реализовать такой запрос? SELECT name FROM products WHERE id IN (value1, value2) пробовал вот так $params=array('id'=&gt;...

BETWEEN в PDO - PHP БД
Начал буквально час назад работать с опцией BETWEEN, чтобы сделать вывод записей из БД по определенной ячейке, если число в ней совпадает с...

PDO - PHP БД
Есть код: $Plan_ID = 1; $stmt = $pdo-&gt;prepare('SELECT * FROM Plans WHERE ID = ?'); $stmt-&gt;execute(); $Plan = $stmt-&gt;fetchAll(); ...

Фильтрация в PDO - PHP БД
Здравствуйте! Подскажите пожалуйста: 1)Есть скрипт авторизации пользователя на PDO с подготовленными запросами c bindParam 2)Фильтрую...

3
Jodah
Эксперт PHP
2695 / 2367 / 845
Регистрация: 01.08.2012
Сообщений: 8,371
03.12.2017, 20:17 #2
Не надо наследовать класс работы с БД. Передавайте его экземпляр в Auth через конструтор.
0
Sluchayno
30 / 30 / 11
Регистрация: 22.09.2013
Сообщений: 311
03.12.2017, 21:39  [ТС] #3
А можете объяснить чем так лучше? Почему стоит передать экземпляр а не наследоваться?

Просто дело в том что я привел пример. На деле я наследованиеи происходит от другого класса который в свою очередь наследуется от BaseModule и вся эта конструкция работает, за исключеним выше изложенной проблемы.
0
Jodah
Эксперт PHP
2695 / 2367 / 845
Регистрация: 01.08.2012
Сообщений: 8,371
03.12.2017, 23:56 #4
Цитата Сообщение от Sluchayno Посмотреть сообщение
Почему стоит передать экземпляр а не наследоваться?
Ответ тут.

Цитата Сообщение от Sluchayno Посмотреть сообщение
почему при вызове из конструктора $this->checkAuth($param) не работает а при вызове из функции все срабатывает?
Потому что объявляя конструктор класса Auth вы затираете конструктор BaseModule. Но можно в новом конструкторе Auth вызвать конструктор родителя:
PHP
1
2
3
4
5
6
class SubClass extends BaseClass {
   function __construct() {
       parent::__construct(); // Вызываем конструктор родителя.
       print "Конструктор класса SubClass\n"; // Что-то делаем.
   }
}
Цитата Сообщение от Sluchayno Посмотреть сообщение
Почему стоит передать экземпляр
Для удобства можно использовать паттерн Синглтон, тогда не придётся ничего передавать.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2017, 23:56
Привет! Вот еще темы с ответами:

Объект PDO - PHP БД
Здравствуйте, разбираюсь с PDO, хочу достать из таблицы данные, код ниже: &lt;?php class DBExample { public function myQuery() ...

Sum() в PDO - PHP БД
Всем привет, подскажите как данный запрос будет выглядеть в PDO? $cbm = mysql_result(mysql_query(&quot;select sum(`money`) from `users`...

PDO исключения - PHP БД
Собственно есть такой вот код class Helper { private $_db; function __construct($config = FALSE) { ...

PDO::MYSQL_ATTR_FOUND_ROWS - PHP БД
Есть данный код проверки на уникальность логина : $connection = db_connect(); $a = $connection-&gt;prepare('SELECT iduser FROM users...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru