Php 致命错误:未捕获错误:调用未定义的方法prepare()
我是OOP新手。这些是我的职责。我事先准备好的声明并不正确 工作: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
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()
就无法工作,因为您没有设置该变量。