Ошибка:
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;
}
}
В классе mysql_PDO в методе connect замените $db на $this->db. Потому как вы должны работать со свойством объекта, а не локальной переменной.
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;
}
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Делаю бэкэнд в приложении на yii2-advanced, очистил кэш и теперь вместо страницы индекса в бэкэнде отображается файл конфигаКак исправить?
Как скрыть вывод json в нижеуказанном коде (или обойти это)? Сейчас echo выводит содержимое json на страницеБез вывода echo консоль выводит