调用未定义的方法pdo :: prepare

时间:2014-01-01 20:53:16

标签: php mysql object pdo instance

我正在为一个网站编写一个注册脚本,并在registration.php脚本中使用函数databaseConnection测试代码,每次都工作但是现在我将databaseConnection函数替换为一个单独的文件,所以我不必输入相同的代码每一次都会。

我从databaseConnection.php文件中获取了数据库中的实例并将其加载到registration.php中的私有变量$ db_connection中,现在我想为sql语句准备连接,但脚本返回错误'调用undefined方法DatabaseConnection :: prepare()'

这是databaseConnection.php脚本

<?php
class DatabaseConnection {
//private zodat niemand een nieuwe kan maken
private static $instance = null;
//constructor private zodat niemand instantie kan klonen
private function __construct(){
    try{
        $this->db_connection = new PDO('mysql:host='. DB_HOST .';dbname='. DB_NAME, DB_USER, DB_PASS);
        return true;
    } catch (PDOException $exception){
            $this->errors[] = $this->lang['Database error'];
        return false;
    }
}
public static function getInstance(){
    if(self::$instance === null)
        self::$instance = new DatabaseConnection();

    return self::$instance;
}
}
?>

我在registration.php的__construct函数中将实例加载到$ db_connection中,就像这样

$this->db_connection = databaseConnection::getInstance();

现在我的代码在$ check_user_name = ... line

上崩溃了
...
        } else if ($this->db_connection != null){
        $check_username_query = $this->db_connection->prepare('SELECT user_name, user_email FROM users WHERE user_name=:user_name OR user_email=:user_email'); 
...

有人可以帮我解决这个错误吗?我在stackoverflow上读了类似的问题,但无法用那里给出的信息来解决它。

此致

2 个答案:

答案 0 :(得分:2)

更仔细地阅读错误消息:'调用未定义的方法 DatabaseConnection :: prepare()'

您的DatabaseConnection::getInstance()会返回DatabaseConnection而不是PDO的实例。一种可能的解决方案是在DatabaseConnection中实施__call()或像Chris Barrett所说的那样扩展PDO

答案 1 :(得分:0)

$ this-&gt; db_connection是我认为的DatabaseConnection对象而不是PDO对象。您可能希望扩展PDO对象,例如:

class DatabaseConnection extends PDO {

否则,您可以在PDO周围声明要调用的方法的包装函数。