Форум программистов, компьютерный форум, киберфорум
PHP: ООП
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/11: Рейтинг темы: голосов - 11, средняя оценка - 4.64
101 / 100 / 51
Регистрация: 19.04.2011
Сообщений: 958
1

Статический метод DB (Ошибка: Call to a member function query() on null)

13.11.2017, 14:23. Показов 2084. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте!
Хочу сделать класс базы данный статическим, переписывают весь класс, вот это метод:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    // Ассоциативный массив
    public function associative($q, $all = false)
    {
        $value = $this->inquiry($q);
 
        if ($all)
        {
            $array = array();
            while ($row = $value->fetch_array(MYSQLI_ASSOC))
            {
                $array[] = $row;
            }
 
            return $array;
        }
 
        return $value->fetch_array(MYSQLI_ASSOC);
    } // Ассоциативный массив End
Делаю так (всего две правки):
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    // Ассоциативный массив
    public static function associative($q, $all = false)
    {
        $value = self::inquiry($q);
 
        if ($all)
        {
            $array = array();
            while ($row = $value->fetch_array(MYSQLI_ASSOC))
            {
                $array[] = $row;
            }
 
            return $array;
        }
 
        return $value->fetch_array(MYSQLI_ASSOC);
    } // Ассоциативный массив End
Теперь пробую использовать данный метод в другом классе:
PHP
1
$v = db::associative($q);
И получаю ошибку: Call to a member function query() on null на строку:
PHP
1
$value = self::inquiry($q);
Перепроверил, переменная $q внутри этого метода определена, содержит запрос, который я передаю...
С другими методами такой проблемы нет...
Подскажите, как такое можно решить.
Спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.11.2017, 14:23
Ответы с готовыми решениями:

Fatal error: Call to a member function query() on null
доброго времени суток всем! проблема: есть класс базы данных (упрощенный пример класса приведён...

Ошибка: Call to a member function prepare() on null
Добрый день Есть файл со следующим кодом для подключения к базе на Open Server $host =...

Ошибка: Call to a member function toArray() on null
Периодически рандомная страница компонента меток joomla 3.8.11 в версии php 7.2.5 выдает ошибку:...

Ошибка call to a member function query() on a non-object in php mysqli
Добрый день, выскакивает ошибка call to a member function query() on a non-object $resut =...

6
Эксперт PHP
3851 / 3196 / 1343
Регистрация: 01.08.2012
Сообщений: 10,820
13.11.2017, 14:52 2
Цитата Сообщение от Raisin Zn Посмотреть сообщение
И получаю ошибку: Call to a member function query() on null
Не удалось вызвать метод query. В показанном вами коде нет вызова этого метода.

Предположу, что в методе inquiry() что-то не то с коннектом к БД.
0
101 / 100 / 51
Регистрация: 19.04.2011
Сообщений: 958
13.11.2017, 14:58  [ТС] 3
Цитата Сообщение от Jodah Посмотреть сообщение
Предположу, что в методе inquiry() что-то не то с коннектом к БД.
Вот он:
PHP
1
2
3
4
5
6
7
8
9
10
11
    // Выполнение запроса
    public static function inquiry($q)
    {
        $r = self::$db->query($q);
        if (empty($r))
        {
            exit(self::$db->error);
        }
 
        return $r;
    } // Выполнение запроса End
Подключение такое:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    public function __construct()
    {
        self::connect(
            device::param('db.host'), 
            device::param('db.user'), 
            device::param('db.password'), 
            device::param('db.name')
        );
    }
 
    // Подключение
    private static function connect($host, $user, $password, $name)
    {
        self::$db = new mysqli($host, $user, $password, $name);
        if (self::$db->connect_errno)
        {
            exit(self::$db->connect_error);
        }
 
        self::$db->set_charset('utf8');
    } // Подключение END
0
Эксперт PHP
3851 / 3196 / 1343
Регистрация: 01.08.2012
Сообщений: 10,820
13.11.2017, 15:09 4
Raisin Zn, а вы вызвали метод connect перед этим кодом?
PHP
1
db::associative($q);
1
101 / 100 / 51
Регистрация: 19.04.2011
Сообщений: 958
13.11.2017, 15:14  [ТС] 5
Хм... А он разве не вызывается через конструктор?
У меня без статики автоматом вызывался, но тут ведь создавался объект... Я запутался...

У меня в одном файле (не класс) подключаются основные классы, можно там его сразу и объявить?
0
Эксперт PHP
3851 / 3196 / 1343
Регистрация: 01.08.2012
Сообщений: 10,820
13.11.2017, 15:19 6
Лучший ответ Сообщение было отмечено Raisin Zn как решение

Решение

Цитата Сообщение от Raisin Zn Посмотреть сообщение
Хм... А он разве не вызывается через конструктор?
Конструктор вызывается при создании объекта. Когда вы пишете new db(). Для вашего подхода это не поможет.

Гуглите Singleton. Выглядит примерно так:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
class DB
{
    private static $db;
 
    public static function conn()
    {
        if(!self::$db)
            self::$db = new PDO(...);
        
        return self::$db;
    }
    
    public static function select($query)
    {
        return self::conn()->query($query)->fetchAll(PDO::FETCH_ASSOC);
    }
}
 
$rows = DB::select('SELECT * FROM `table`');
Где-то мог ошибиться, но идея должна быть ясна.
1
101 / 100 / 51
Регистрация: 19.04.2011
Сообщений: 958
13.11.2017, 16:26  [ТС] 7
Jodah, спасибо, большое! Заработало!
0
13.11.2017, 16:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.11.2017, 16:26
Помогаю со студенческими работами здесь

Call to a member function query() on null
Здравствуйте, не могу разобраться почему подобная ошибка появляется в двух местах. Здесь в 62...

Fatal error: Call to a member function query() on null
доброго времени суток всем! проблема: есть класс базы данных и есть метод query который...

Uncaught Error: Call to a member function query() on null in
вот код: &lt;?php function connect_db(){ $mysqli=new mysqli('localhost','root','','double');...

В чем ошибка? Call to a member function find() on null
include_once 'simple_html_dom.php'; $html = file_get_html('example.ru'); $links =...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru