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

时间:2014-05-23 08:39:31

标签: php mysql class

我想在我的Model __construct中建立一个连接,并且能够在子类中使用它。但我收到错误"在非对象上调用成员函数prepare()"。

model.php

include('model/articlemodel.php');

class Model{
    protected $conn;
    public function __construct(){
        try {
            $this->conn = new PDO('mysql:host='.DB_HOST.';dbname='.DB_DATABASE, DB_USER, DB_PASS);
            $this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        } catch(PDOException $e) {
            echo 'KLAIDA: ' . $e->getMessage();
        }
    }
}

articlemodel.php

class ArticleModel extends Model{
    public function __construct(){
    }
    public function selectArticles(){
        $stmt = $this->conn->prepare('SELECT * FROM txt_articles ORDER BY id DESC');
        $stmt->execute();

        $i = 0;
        $article_id = array();
        $article_title = array();
        $article_date = array();
        $article_content = array();

        while($row = $stmt->fetch()) {
            $article_id[i] = $row['id'];
            $article_title[i] = $row['title'];
            $article_date[i] = $row['date'];
            $article_content[i] = $row['content'];
            $i++;
        }

        return array($article_id, $article_title, $article_date, $article_content);
    }
}

经过实验后,我发现conn仅在__constructor范围内有效。有没有办法在类中建立一个连接,并根据所述连接让它的子类运行查询?

1 个答案:

答案 0 :(得分:2)

您正在覆盖子类中的构造,因此永远不会调用父构造函数

所以在子课堂上你需要做一些事情

public function __construct(){
   parent::__construct() ;
}