在非对象上调用成员函数query()

时间:2013-11-26 21:23:28

标签: php mysql

在find_by_id()方法中,第一行有此错误(在第14行的C:\ wamp \ www \ product.php中的非对象上调用成员函数query())

include_once('database.php');
class Product{
    private $database;

    public function _construct (){
        $this->database = new MySQLDatabase();
    }
    public function find_by_id($id=1){
        $result = $this->database->query("select * from product where id = $id");
        $array = $this->database->fetch_array($result);
        return $array;
    }
}

这是我上面包含的database.php文件

class MySQLDatabase{
private $connection ;

public function _construct(){
    $this->open_connection();
}
public function open_connection(){
    $dbc = mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD,DB_DBNAME);
    $this->connection = $dbc;
    echo 'connection opened';
}   
public function close_connection(){
    mysqli_close($this->connection);
}
public function query($sql){
    $result = mysqli_query($this->connection,$sql);
    return $result;
}
public function fetch_array($result){
    return mysqli_fetch_array($result);
}
}

为什么会出现这个错误?请帮助我,并提前致谢。

3 个答案:

答案 0 :(得分:0)

您的班级名为" MySQLDatabase",但您正在呼叫

$this->database = new Database();

因此,您没有数据库对象和"查询"不是一个功能。您必须按名称(而不是文件名)调用该类,因此将其更改为

$this->database = new MySQLDatabase();

您的代码应该有效。

答案 1 :(得分:0)

更改

 
  _construct()
 

 
  __construct()
 

这应解决您的问题,因为PHP在创建对象时调用 __ construct()

希望这会有所帮助。

答案 2 :(得分:0)

所有这些_construct都需要替换为__construct,除非这是您的错字。

Constructs需要2x下划线。

阅读PHP.net网站上的手册,了解有关构造的更多信息: