我正在为网站编写注册脚本,并使用了registration.php脚本中的databaseConnection函数测试了代码,一切正常,但是现在我将databaseConnection函数替换为单独的文件,因此我不必每次都再次键入相同的代码。

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

这是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 = ...行崩溃

...
        } 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的类似问题,但无法通过其中给出的信息弄清楚。

问候

最佳答案

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

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

10-06 06:38