【问题标题】:How to access PDO object in class?如何访问类中的 PDO 对象?
【发布时间】:2014-08-24 04:32:12
【问题描述】:

我正在尝试构建一个简单的数据库类。在构造函数中,我正在初始化与我的 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");

任何关于错误原因的建议将不胜感激。

【问题讨论】:

  • 您在function __contruct() 中有错字。它永远不会被自动调用。
  • PHP 不知道如何“构造”

标签: php mysql pdo


【解决方案1】:

你的构造函数有两个问题:

  1. 拼写错误:__contruct() 应该是 __construct()
  2. 它是私有的,因此您无法从类外部实例化它。

#2 不一定是问题,但您需要一个静态方法来处理它。

【讨论】:

  • 感谢您指出我的错误。我改变了这两个东西,现在它可以工作了。
猜你喜欢
  • 1970-01-01
  • 2013-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-04
  • 2018-03-02
相关资源
最近更新 更多