Php 实例化db类后出现未定义的方法prepare()错误
我正在尝试使用下面的代码创建一个简单的用户注册类。 user.php类中需要数据库文件,并在使用准备好的方法之前实例化。但在这一行我仍然得到一个未定义的方法db::prepare $stmt=$db->准备插入用户名,电子邮件值:name,:email 我哪里做错了 数据库类Php 实例化db类后出现未定义的方法prepare()错误,php,mysql,sql,pdo,prepare,Php,Mysql,Sql,Pdo,Prepare,我正在尝试使用下面的代码创建一个简单的用户注册类。 user.php类中需要数据库文件,并在使用准备好的方法之前实例化。但在这一行我仍然得到一个未定义的方法db::prepare $stmt=$db->准备插入用户名,电子邮件值:name,:email 我哪里做错了 数据库类 require_once('tryerrors.php'); class db { private $dsn = 'mysql:host=127.0.0.1;dbname=users'; private
require_once('tryerrors.php');
class db {
private $dsn = 'mysql:host=127.0.0.1;dbname=users';
private $username = 'root';
private $password = '';
public $dbh;
public function __construct(){
$this->conn();
}
public function conn(){
try {
$this->dbh = new PDO($this->dsn, $this->username, $this->password);
$this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
} catch (PDOException $e) {
$error = new Errors();
echo $error->displayError($e);
}
}
用户类
require_once ('db.php');
class Users{
public $dbh;
public function reg_user($name, $email) {
try{
$db = new db;
$stmt = $db->prepare ("INSERT INTO users (name, email) VALUES (:name, :email)");
$stmt->execute(array($name, $email));
} catch (PDOException $e) {
$error = new Errors();
echo "<b>".$error->displayError($e)."</b>";
}
}
}
$reg = new Users;
$reg->reg_user('name', 'name@email.com');
您应该从$db对象访问dbh属性,以在用户类中获取数据库处理程序:
或者您可以更改数据库类构造函数:
和conn方法:
$db = new db;
$stmt = $db->dbh->prepare ("INSERT INTO users (name, email) VALUES (:name, :email)");
public function __construct(){
return $this->conn();
}
public function conn(){
try {
$this->dbh = new PDO($this->dsn, $this->username, $this->password);
$this->dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->dbh->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
return $this->dbh;
} catch (PDOException $e) {
$error = new Errors();
echo $error->displayError($e);
}
}