Php 致命错误:未捕获错误:调用未定义的方法prepare()

Php 致命错误:未捕获错误:调用未定义的方法prepare(),php,prepared-statement,Php,Prepared Statement,我是OOP新手。这些是我的职责。我事先准备好的声明并不正确 工作: function __construct($dbdetails){ $this->_dbh = Connect :: getInstance($dbdetails); return $this->_dbh; } function sendData(){ $stmt = $this->_dbh->prepare("INSERT INTO users (userna

我是OOP新手。这些是我的职责。我事先准备好的声明并不正确 工作:

function __construct($dbdetails){
    $this->_dbh = Connect :: getInstance($dbdetails);
    return $this->_dbh;
}


function sendData(){        
    $stmt = $this->_dbh->prepare("INSERT INTO users (username, email, password) VALUES(:username, :email, :password)");

    $stmt->bindValue(':username', $this->_sentdetails[0]);
    $stmt->bindValue(':email', $this->_sentdetails[1]);
    $stmt->bindValue(':password', $this->_sentdetails[2]);

    $stmt->execute();
}
这个函数给我的错误是

致命错误:未捕获错误:调用未定义的方法Connect::prepare()

类Connect是我获取连接实例的地方,我很确定我没有输入错误。准备好的语句是在
PDO
类上进行的,对吗?那么为什么我的prepare语句接受
Connect
类而不是
PDO

编辑:这是我的连接类

class Connect{

private $_dbh,
        $_host,
        $_dbname,
        $_username,
        $_password;

public static $instance;


//the actual connection
private function __construct($dbdetails){

$this->_host = $dbdetails['host'];    
$this->_dbname = $dbdetails['dbname'];    
$this->_charset = $dbdetails['charset'];    
$this->_username = $dbdetails['username'];    
$this->_password = $dbdetails['password'];

try{    
$this->_dbh = new PDO("mysql:host=$this->_host;
                            dbname=$this->_dbname;
                            charset=$this->_charset",
                            $this->_username,
                            $this->_password);  
}catch(PDOException $e){
    echo "Error : " . $e;
}
}

//creating instance for connection
public function getInstance($dbdetails){
if(!isset(self::$instance)){
     return self::$instance = new Connect($dbdetails);
}
else{
    return self::$instance->_dbh;
}
}
}
Connect::getInstance()
的实现不一致。第一次调用时,它创建一个
新的Connect
对象并返回该对象。其他时候,它返回
$this->\u dbh
中的
PDO
对象

getInstance()
应始终返回
Connect
对象,并且应使用另一种方法返回
PDO
对象

class Connect{

    private $_dbh,
        $_host,
        $_dbname,
        $_username,
        $_password;

    public static $instance;


    //the actual connection
    private function __construct($dbdetails){

        $this->_host = $dbdetails['host'];    
        $this->_dbname = $dbdetails['dbname'];    
        $this->_charset = $dbdetails['charset'];    
        $this->_username = $dbdetails['username'];    
        $this->_password = $dbdetails['password'];

        try{    
            $this->_dbh = new PDO("mysql:host=$this->_host;
                            dbname=$this->_dbname;
                            charset=$this->_charset",
                                  $this->_username,
                                  $this->_password);  
        }catch(PDOException $e){
            echo "Error : " . $e;
        }
    }

    //creating instance for connection
    public function getInstance($dbdetails){
        if(!isset(self::$instance)){
            self::$instance = new Connect($dbdetails);
        }
        return self::$instance;
    }

    public function getConnection() {
        return $this->getInstance()->_dbh;
    }
}
那么第一节课应该做:

function __construct($dbdetails) {
    $this->_dbh = Connect::getInstance($dbdetails)->getConnection();
}

$this->\u dbh
仍然给我一个空值。感谢您与我交谈。我修复了我添加的
DB::getInstance($dbdetails)的问题在我的Connect类下面,现在似乎可以工作了(没有
$this->\u dbh=Connect::getInstance($dbdetails)->getConnection();
部分)。如果不这样做,那么
$this->\u dbh->prepare()
就无法工作,因为您没有设置该变量。