php在null上调用成员函数query()

时间:2016-09-11 09:13:11

标签: php mysql

您好我收到此错误

Call to a member function query() on null

Fatal error: Call to a member function query() on null

Call to member function query() on Null

但似乎都没有解决我的问题

我有db class

class DB
{
    private $link;

    public function __construct() 
    {
        $this->link = new mysqli(HOSTNAME, USERNAME, PASSWORD, DBNAME);
        if ($this->link->connect_error) 
        {
            exit('Some of the database login credentials seem to be wrong.' . $this->link->connect_error);
        }
    }
}

然后我尝试用这个类

查询数据库
class UserModel extends DB
{
    private $db;

    public function __construct()
    {
        $this->getUser();
    }

    public function getUser()
    {
        $query = $this->db->query("SELECT * FROM users");
        var_dump($query);
    }
}

这些文件位于site / app / model / file.php

我在我的站点/ index.php

中实例化db

2 个答案:

答案 0 :(得分:4)

这里有几个错误:

  1. UserModel类中定义自己的构造时,未运行父__construct,其中$link var已定义。您可以将parent::__construct();添加到子构造函数。

  2. 在您的父类中,您有$link变量,而不是$db$linkprivate,因此在儿童课程中不可用。

  3. 固定代码

    class DB
    {
        protected $link;   // protected here
    
        public function __construct() 
        {
            $this->link = new mysqli(HOSTNAME, USERNAME, PASSWORD, DBNAME);
            if ($this->link->connect_error) 
            {
                exit('Some of the database login credentials seem to be wrong.' . $this->link->connect_error);
            }
        }
    }
    
    
    class UserModel extends DB
    {
    
        public function __construct()
        {
            // call parent construct and define $this->link
            parent::__construct();  
            $this->getUser();
        }
    
        public function getUser()
        {
            // use $this->link
            $query = $this->link->query("SELECT * FROM users");
            var_dump($query);
        }
    }
    

答案 1 :(得分:0)

变换

  

私人$ link

  

受保护的$ link

这允许子类可以访问此类变量。

当然,请使用$this->link代替$this->db