【发布时间】:2015-05-22 10:12:14
【问题描述】:
我正在使用 PHP OOP 做一个项目。但我收到错误:致命错误:在第 12 行的 ..../PhotoSection.php 中调用非对象上的成员函数 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;
}
}
类数据库业务
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();
?>
我已经阅读了重复的问题,但是我已经在 DatabaseAdapter 中声明并初始化了 _pdo 并对其进行了扩展,所以我不知道为什么会出错。 感谢您的帮助
【问题讨论】:
-
旁注:不能绑定表名
-
@Ghost 谢谢。这是我的错误。我会编辑。
-
在 PhotoSection 类中添加“parent::__construct()”就可以了
-
@yip 这正是我所需要的。太感谢了。 :)