-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-&gt;getMessage();
    }
}

public static function query($stmt) {return self::$db-&gt;query($stmt);}
public static function prepare($stmt) {return self::$db-&gt;prepare($stmt);}
public static function exec($query) {return self::$db-&gt;exec($query);}

public static function run($query, $args = []) {
        if(!$args) {return self::query($query);}
        $stmt = self::prepare($query);
        $stmt-&gt;execute($args);
        return $stmt; 
}

public static function GetRow($query, $args = []) {return self::run($query, $args)-&gt;fetch();}
public static function GetRows($query, $args = []) {return self::run($query, $args)-&gt;fetchAll();}
public static function GetColumn($query, $args = []) {return self::run($query, $args)-&gt;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]); } }

void
  • 1

1 Answers1

0

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

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

Joe Ford
  • 334