[英]PHP oop inheritance of PDO connection to mysql database
我创建了两个类USER
和ADMIN
,并且admin扩展了user。
使用USER
类的对象时,我可以从数据库中获取所需的数据,但是使用ADMIN
对象时,则无法获取任何数据。 这些类如下:
class USER
{
private $conn;
public function __construct()
{
$database = new Database();
$db = $database->dbConnection();
$this->conn = $db;
}
public function runQuery($sql)
{
$stmt = $this->conn->prepare($sql);
return $stmt;
}
...some functions to query the DB
}
和
class ADMIN extends USER
{
private $conn;
public function __construct()
{
$database = new Database();
$db = $database->dbConnection();
$this->conn = $db;
}
...some other functions to query the DB
}
起初我没有包括构造函数,因为我读到admin将继承每个非private
属性,因此这是我的第二次尝试,但是在两种情况下,我都收到此错误:
Call to a member function prepare() on a non-object
任何想法我想念什么? 谢谢
更新:我在ADMIN
类中具有以下功能:
public function getAppeals($user_id){
$stmt = $this->conn->prepare("SELECT * FROM appeals WHERE lecturer_id = :lecturer_id");
$stmt->execute(array(':lecturer_id' => $user_id));
$userRow = $stmt->fetchall(PDO::FETCH_ASSOC);
return $userRow;
}
产生错误的行是这样的:
$stmt = $this->conn->prepare("SELECT * FROM appeals WHERE lecturer_id = :lecturer_id");
这应该可以说明您的问题http://php.net/manual/zh/language.oop5.visibility.php
私有属性仅在定义它的类中可见。 但是,将其设置为protected
将允许它从任何扩展USER的类中访问,因此假定您从ADMIN类运行父构造parent::__construct();
如parent::__construct();
ADMIN将可以看到它parent::__construct();
如果您进行了这些更改,它应该可以正常工作
class USER
{
//private $conn;
protected $conn;
public function __construct()
{
$database = new Database();
$db = $database->dbConnection();
$this->conn = $db;
}
public function runQuery($sql)
{
$stmt = $this->conn->prepare($sql);
return $stmt;
}
...some functions to query the DB
}
class ADMIN extends USER
{
public function __construct()
{
parent::__construct();
}
public function getAppeals($user_id){
$stmt = $this->conn->prepare("SELECT * FROM appeals WHERE lecturer_id = :lecturer_id");
$stmt->execute(array(':lecturer_id' => $user_id));
$userRow = $stmt->fetchall(PDO::FETCH_ASSOC);
return $userRow;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.