【发布时间】:2014-04-20 21:12:43
【问题描述】:
我正在尝试调用我的 Database 类中的一个函数,但我似乎无法正确调用它。
我的模型类调用数据库并将其分配给一个变量:
class Model {
function __construct() {
$this->db = new Database();
}
function __destruct() {
$this->db = NULL;
}
}
我正在尝试从以下位置调用它:
class User extends Controller {
function __construct() {
parent::__construct();
}
public function userExists($username) {
return $this->model->db->select('users', 'id', 'email LIKE ?', array($username));
}
}
但我不断收到错误:
Fatal error: Call to a member function select() on a non-object in C:\Apache24\htdocs\Manager 2014\controllers\User.php on line 10
我的数据库类是:
class Database extends PDO {
function __construct($user = 'root', $pass = '', $database = 'xxx', $host = 'localhost') {
try {
parent::__construct('mysql:host=' . $host . ';dbname=' . $database, $user, $pass);
$this->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
$this->setAttribute(PDO::ATTR_PERSISTENT, FALSE);
$this->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
$this->setAttribute(PDO::ATTR_EMULATE_PREPARES, FALSE);
$this->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, FALSE);
$this->exec("SET NAMES utf8");
} catch (PDOException $e) {
Database::handleDbError($e);
}
}
public function select($table, $cols, $where = null, $whereVals = null, $order = null) {
if ($this->tableExists($table)) {
$PDOParams = array();
$SQL = 'SELECT ' . $cols . ' FROM ' . $table;
if ($where) {
$SQL .= ' WHERE ' . $where;
}
if ($whereVals) {
}
if ($order) {
$SQL .= 'ORDER BY ' . $order;
}
return $SQL;
} else {
}
}
public function tableExists($table) {
$r = $this->PDO->prepare("SHOW TABLES LIKE ?");
$r->execute(array($table));
return $r->rowCount();
}
}
我做错了什么?
如果我:
print_r(get_class_vars ('UserModel'));
从我得到的用户类:
Array( [db] => )
这对我来说没有意义,因为这是在调用 UserModel 时调用的构造函数中的 Model 中分配的。
我的 Database 类中没有 select(),现在我的主 Model 类中有以下内容:
public function get($primaryKeyId) {
$table = str_replace('model', '', strtolower(get_called_class()));
$SQL = "SELECT * FROM $table WHERE id = ?";
$r = $this->db->prepare($SQL);
$r->execute(array($primaryKeyId));
return $r->fetch();
}
【问题讨论】: