Я делаю проект с PHP OOP. Но я получаю ошибку: Неустранимая ошибка: вызов функции-члена prepare() для не-объекта в ..../PhotoSection.php в строке 12. Ниже приведен мой исходный код.PHP OOP Вызов функции-члена prepare() для не-объекта
класс DatabaseAdapter для подключения к базе данных
<?php
class DatabaseAdapter {
protected $_pdo;
function connect() {
if (!$this->_pdo) {
try {
$this->_pdo = new PDO("mysql:host=localhost;dbname=xxx", "xxx", "123456");
$this->_pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->_pdo->exec("SET CHARACTER SET utf8");
$this->_pdo->exec("set character_set_client='utf8'");
$this->_pdo->exec("SET character_set_results='utf8'");
$this->_pdo->exec("SET collation_connection='utf8_general_ci'");
} catch (PDOException $e) {
echo $e->getMessage();
exit;
}
}
}
function disconnect() {
$this->_pdo = null;
}
}
класс DatabaseBusiness
require 'DatabaseAdapter.php';
class DatabaseBusiness extends DatabaseAdapter {
protected $_table = "";
protected $_primaryKey = "";
function __construct() {
parent::connect();
}
function __destruct() {
parent::disconnect();
}
}
класс PhotoSection
<?php
class PhotoSection extends DatabaseBusiness {
function __construct() {
$this->_table = "photo_section";
$this->_primaryKey = "id";
}
function selectAll() {
try {
$stmt = $this->_pdo->prepare("select * from ?");
$stmt->execute(array($this->_table));
} catch (PDOException $ex) {
echo $ex->getMessage();
exit();
}
return $stmt->fetchAll();
}
}
теперь включают в шаблон для отображения данных
<?php
include_once 'libraries/DatabaseBusiness.php';
include_once 'libraries/PhotoSection.php';
$photoSection = new PhotoSection();
$photos = $photoSection->selectAll();
?>
Я прочитал дубликаты вопросов, но я объявил и инициализировал _pdo в DatabaseAdapter и расширяет его, поэтому я не знаю, почему ошибка. спасибо за любые помочь
sidenote: вы не можете связывать имена таблиц – Ghost
@Ghost спасибо. Это моя ошибка. Я отредактирую. – carboncrystal
Добавляя "parent :: __ construct()" в класс PhotoSection в порядке – yip