Singleton和我的db类

时间:2014-05-03 13:48:22

标签: php mysqli singleton undefined

当我尝试打开我的网站时,我收到了这个错误:

  

注意:未定义的属性:第75行的\ www \ classes \ db.class.php中的User :: $ mysqli


  

致命错误:在第75行的www \ classes \ db.class.php中的非对象上调用成员函数prepare()

75行和GetInstance()

public static function getInstance()
    {
        if (empty(self::$instance)) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    public function session_check($username, $hash)
    {

        if ($stmt = $this->mysqli->prepare("SELECT  `hash` FROM `accounts` WHERE `username` = ?")) {
            $stmt->bind_param("s", $username);
            $stmt->execute();
            $stmt->bind_result($db_hash);
            $stmt->fetch();
            $stmt->close();
            if ($hash == $db_hash) return true;
        }
        return false;
    }

用户类

        class User extends db
    {
        public $username;
        public $user_info;
        public function  __construct()
        {
            if (!isset($_SESSION['username']) || !isset($_SESSION['hash']) || !isset($_SESSION['last_activity'])) {
                Template::login_page('login.tpl');
                exit;
            } else {
                $this->username = $_SESSION['username'];
                if (!db::getInstance()->session_check($this->username, $_SESSION['hash'])) {
                    Template::login_page('login.tpl');
                    exit;
                }
            }
        }


    }

所以,我不知道出了什么问题。

1 个答案:

答案 0 :(得分:0)

我认为你需要使用

  

if(db :: getInstance() - > session_check($ this-> username,   $ _SESSION ['散列']))

而不是

  

if(!db :: getInstance() - > session_check($ this-> username,   $ _SESSION ['散列']))

因此,如果可以初始化类(脚本连接到数据库) - >你可以做点什么。在其他情况下,您需要抛出异常"无法连接到数据库。"。

if (!db::getInstance()->session_check($this->username, $_SESSION['hash'])) {
    throw new Exception("Can't connect to database.");
} else {
    //blablabla
}