【发布时间】:2016-05-24 20:05:52
【问题描述】:
我创建了自己的数据库类来简化 MySQLi 准备好的语句,我正尝试在另一个类中访问它。
我已将数据库类扩展到我的配置文件类并尝试在我的构造中运行选择查询并返回此错误:
致命错误:在第 80 行 /home/matt500b/dev2.csgoberry.com/includes/database.class.php 中的 null 上调用成员函数 prepare()
配置文件类构造:
public function __construct($username) {
$params = parent::SELECT("SELECT users_info.*, users.username, users.lastOnline FROM users_info INNER JOIN users ON users.id = users_info.user_id WHERE users.username = ?", array('s', $username));
$this->fname = (isset($params[0]['fname']) ? $params[0]['fname'] : null);
/*More settings done here*/
}
但是,如果我先运行查询,然后将数据发送到构造,如下所示:
$profileData = $db->SELECT('SELECT users_info.*, users.username, users.lastOnline FROM users_info INNER JOIN users ON users.id = users_info.user_id WHERE users.username = ?', array('s', $pid));
$pclass = new user_profile($profileData);
结构为:
public function __construct($params){
$this->fname = (isset($params[0]['fname']) ? $params[0]['fname'] : null);
}
一切都很好。当然,数据库实例是使用$db = new database(HOST, USER, PASSWORD, DATABASE, DEBUG); 调用的,我的数据库结构是:
public function __construct($db_host, $db_user, $db_pass, $db_name, $debug){
$this->link = mysqli_connect($db_host, $db_user, $db_pass);
mysqli_select_db($this->link, $db_name);
$this->debug = $debug;
}
错误与这一行有关:if ($stmt = $this->link->prepare($sql)) { 并表明 $sql 为空,但是这两个查询除了来源之外完全相同(parent::SELECT 与 $db->SELECT)。
有什么建议可以完成这项工作吗?
非常感谢
【问题讨论】:
-
$this->link为 null 而不是$sql。我没有在问题的代码示例中看到这行代码。你的问题很难理解,因为不清楚整个调用堆栈是什么样的。 -
$this->链接在数据库结构中定义。