Я создал два класса, USER
и ADMIN
, а администратор расширяет пользователя.PHP oop наследование PDO-соединения с базой данных mysql
Я могу получить любые данные, которые мне нужны из базы данных при использовании объекта класса 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
}
на первом я не включили конструктор, так как я прочитал, что администратор будет наследовать все не private
свойства, так что это моя вторая попытка, но в в обоих случаях я получил эту ошибку:
Call to a member function prepare() on a non-object
любая идея, что мне не хватает? ТНХ
UPDATE: я иметь эту функцию, например, в 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");
Пользователь, добавляющий администратора, обращается ко мне назад - администратор - это подмножество ваших пользователей, а не наоборот. Создание соединения с базой данных в каждом классе - плохой вызов - передать существующее соединение в класс из вашего всеобъемлющего приложения. – ceejayoz
@ceejayoz Yea Я тоже видел это, но это не то, что он на самом деле делает, если вы посмотрите на код – RiggsFolly
Вы уверены, что хотите написать свой собственный ORM, когда есть много таких, как [Doctrine] (http: //www.doctrine- project.org/) и [Propel] (http://propelorm.org/), которые полнофункциональны и протестированы? – tadman