如何在类中访问PDO对象?

时间:2014-08-24 04:32:13

标签: php mysql pdo

我正在尝试构建一个简单的数据库类。在构造函数中,我正在初始化到MySQL数据库的PDO连接。我将此连接分配给数据库类中的私有变量。然后,我想从同一个类中的公共函数访问该变量以查询数据库。不幸的是,我不断收到如下错误:

Fatal error: Call to a member function prepare() on a non-object.

以下是我正在使用的数据库类的代码:

class Database{
    private $conn;

    private function __contruct(){
        try{
            $this->conn = new PDO('mysql:host=myhost;dbname=mydatabase', 'username', 'password', array(PDO::ATTR_PERSISTENT => true));
        } catch (PDOException $e) {
            print "Error!: " . $e->getMessage()."<br/>";
            die();
        }
    }

    public function query($q){
        $query = $this->conn->prepare($q);
        $query->execute();
        $result = $query->fetchAll();
        print_r($result);
    }
}

然后我有以下代码来使用这个类。

$db = new Database();
$db->query("SELECT * FROM FOO");

非常感谢任何有关错误原因的建议。

1 个答案:

答案 0 :(得分:0)

构造函数有两个问题:

  1. 拼写错误:__contruct()应为__construct()
  2. 它是私人的,所以你无法从课堂外实例化它。
  3. #2不一定是个问题,但你需要一个静态的方法来做任何事情。