-1

Ошибка

Fatal error: Uncaught Error: Call to a member function prepare() on null in E:\IT\OpenServer\domains\bookshop\application\lib\Db.php:26 Stack trace: #0 E:\IT\OpenServer\domains\bookshop\application\lib\Db.php(31): application\lib\Db::prepare() #1 E:\IT\OpenServer\domains\bookshop\application\lib\Db.php(39): application\lib\Db::run() #2 E:\IT\OpenServer\domains\bookshop\application\models\Account.php(10): application\lib\Db::sql() #3 E:\IT\OpenServer\domains\bookshop\application\controllers\AccountController.php(31): application\models\Account::addUser() #4 E:\IT\OpenServer\domains\bookshop\application\core\Router.php(58): application\controllers\AccountController->signupAction() #5 E:\IT\OpenServer\domains\bookshop\index.php(16): application\core\Router->run() #6 {main} thrown in E:\IT\OpenServer\domains\bookshop\application\lib\Db.php on line 26

Db.php

<?php
namespace application\lib;
use PDO;
class Db
{
 public static $db;
 public function __construct() {
 $config = require 'application/config/db.php';
 try {
 self::$db = new PDO(
 'pgsql:host=' . $config['host'] . SPACE .
 'port=' . $config['port'] . SPACE .
 'dbname=' . $config['dbname'] . SPACE .
 'user=' . $config['user'] . SPACE .
 'password=' . $config['password']
 );
 } catch (\Exception $e) {
 echo $e->getMessage();
 }
 }
 public static function query($stmt) {return self::$db->query($stmt);}
 public static function prepare($stmt) {return self::$db->prepare($stmt);}
 public static function exec($query) {return self::$db->exec($query);}
 public static function run($query, $args = []) {
 if(!$args) {return self::query($query);}
 $stmt = self::prepare($query);
 $stmt->execute($args);
 return $stmt; 
 }
 
 public static function GetRow($query, $args = []) {return self::run($query, $args)->fetch();}
 public static function GetRows($query, $args = []) {return self::run($query, $args)->fetchAll();}
 public static function GetColumn($query, $args = []) {return self::run($query, $args)->fetchAll(PDO::FETCH_COLUMN);}
 public static function sql($query, $args = []) {self::run($query, $args);}
}

Account.php (обращаюсь к бд)

<?php
namespace application\models;
use application\core\Model;
use application\lib\Db;
class Account //extends Model
{
 public static function addUser($nickname, $login, $password, $email) {
 Db::sql("INSERT INTO users (nickname, login, password, email) 
 VALUES (?, ?, ?, ?)", [$nickname, $login, $password, $email]);
 }
}
задан 27 июл. 2022 в 6:57
2

1 ответ 1

0

public static function prepare($stmt) {return self::$db->prepare($stmt);} - здесь self::$db будет будет null

создавай объект класса Db в функции addUser или переделай класс Db под singleton

ответ дан 27 июл. 2022 в 7:10

Начните задавать вопросы и получать на них ответы

Найдите ответ на свой вопрос, задав его.

Задать вопрос

Изучите связанные вопросы

Посмотрите похожие вопросы с этими метками.