Выводит ошибку, помогите разобраться

160
05 декабря 2018, 03:20

Ошибка:

Fatal error: Uncaught Error: Call to a member function query() on null in C:\xampp\htdocs\a.com\modules\mysql_PDO.php:44 Stack trace: #0 C:\xampp\htdocs\a.com\controls\list.php(20): mysql_PDO->query('SELECT * FROM s...', false) #1 C:\xampp\htdocs\a.com\index.php(140): list_control->start() #2 {main} thrown in C:\xampp\htdocs\a.com\modules\mysql_PDO.php on line 44

Код обработчика:

class list_control
{
    private $lang;
    function __construct($lang)
    {
        $this->lang = $lang;
        loadModule('mysql_PDO');
    }
    public function start() {
        global $dbc;
        $db = new mysql_PDO($dbc['host'], $dbc['user'], $dbc['password'], $dbc['dbase']);
        $db->connect();
        $db->query('SELECT * FROM slug', false);
        load('list', $this->lang);
        $db = null;
    }
}

Код модуля где ошибка:

class mysql_PDO
    {

        private $host;
        private $user;
        private $password;
        private $dbase;
        private $char;
        public $db;

        function __construct($host, $user, $password, $dbase, $char = 'UTF8mb4')
        {
            $this->host = $host;
            $this->user = $user;
            $this->password = $password;
            $this->dbase = $dbase;
            $this->char = $char;
            function clearStr($str) {
                $str = htmlspecialchars(trim(mysqli_real_escape_string($str)));
                return $str;
            }

        }
        public function connect() {
            $db = new PDO('mysql:host='.$this->host.';dbname='.$this->dbase.'', $this->user, $this->password) or die();
            $db->exec('SET NAMES '.$this->char.'');
        }
        public function query($query, $bool = false) {
            $result = $this->db->query($query); //ВОТ 44 СТРОКА
            $result->execute();
            if ($bool == false) {
                $return = $result->fetchAll();
                return $return;
            } else {
                return $result;
            }
        }
        public function close() {
            $this->db = null;
        }
    }
Answer 1

В классе mysql_PDO в методе connect замените $db на $this->db. Потому как вы должны работать со свойством объекта, а не локальной переменной.

Answer 2
class mysql_PDO
    {

        private $host;
        private $user;
        private $password;
        private $dbase;
        private $char;
        public $db;

        function __construct($host, $user, $password, $dbase, $char = 'UTF8mb4')
        {
            $this->host = $host;
            $this->user = $user;
            $this->password = $password;
            $this->dbase = $dbase;
            $this->char = $char;
            function clearStr($str) {
                $str = htmlspecialchars(trim(mysqli_real_escape_string($str)));
                return $str;
            }

        }
        public function connect() {
            $this->db = new PDO('mysql:host='.$this->host.';dbname='.$this->dbase.'', $this->user, $this->password) or die();
            $this->db->exec('SET NAMES '.$this->char.'');
        }
        public function query($query, $bool = false) {
            $result = $this->db->query($query); //ВОТ 44 СТРОКА
            $result->execute();
            if ($bool == false) {
                $return = $result->fetchAll();
                return $return;
            } else {
                return $result;
            }
        }
        public function close() {
            $this->db = null;
        }
    }
READ ALSO
Как совместить jQuery и PHP?

Как совместить jQuery и PHP?

У меня есть код на js:

136
Помогите понять решение

Помогите понять решение

У меня есть код:

183
Неправильное отображение

Неправильное отображение

Делаю бэкэнд в приложении на yii2-advanced, очистил кэш и теперь вместо страницы индекса в бэкэнде отображается файл конфигаКак исправить?

144
Cкрыть результат вывода json

Cкрыть результат вывода json

Как скрыть вывод json в нижеуказанном коде (или обойти это)? Сейчас echo выводит содержимое json на страницеБез вывода echo консоль выводит

150