PHP数据库类查询致命错误


PHP Database Class query Fatal error

Folks,

让我在这之前说,我正在努力学习OOP,所以我想写我自己的Class,而不是使用现有的Mysqli抽象层。

我在一个文件中定义了这个类,在开始编写特定的查询函数之前,我只是想让一个通用查询正常工作。

<?php
/* Database Config */
define('DB_NAME', 'project');
define('DB_USER', 'foo');
define('DB_PASS', 'bar');
define('DB_HOSTNAME', '127.0.0.1');

class Database {
  private $host;
  private $user;
  private $pw;
  private $db;
  public $con;
  public function __construct($hostname, $user, $pass, $db) {
    $this->DB_HOSTNAME = $hostname; 
    $this->DB_USER = $user;
    $this->DB_PASS = $pass;
    $this->DB_NAME = $db;
  }
   public function connect() {
        $this->con = new mysqli($this->hostname, $this->user, $this->pass, $this->db)
            or die('Database unavailable');
        $this->con->set_charset ('utf8');
    } 
    public function query($sql) {
        $stmt = $this->con->query($sql);
    }
}
// Create a single global instance of the database class
global $DB;
$DB = new Database();
?>

然后我创建了一个简单的test.php,其中包含:

<?php
include_once("include/config.inc");
if ($DB) {
$sql = "select user_login, user_name from users where 1 order by user_name, user_login";
$stmt = $DB->query($sql) or die($DB->errno.__LINE__);
$result = $stmt->fetch_array(MYSQLI_ASSOC);
var_dump($result);
}
else die('Database Unavailable');
?>

当我调用该页面时,我得到

致命错误:在第33行的/www/htdocs/project/include/db.class.php中对非对象调用成员函数query()

我没有从测试页面中得到die,所以我相信它可以到达数据库,我知道表中包含数据,查询也能工作,因为如果我切换到非基于类的DB定义,我会得到一个包含预期数据的数组。

所以我很确定这是我在课堂上制造的一个问题,我只是不知道它是什么。请给我建议?

似乎您的对象不是创建的

这是你的构造。这意味着当您创建对象时,您需要指定参数

public function __construct($hostname, $user, $pass, $db) 

像这个吗

$DB = new Database('hostname', 'dbuser', 'dbpass', 'db');

您的类初始化良好,这不是问题所在。问题是它在con上找不到query函数,因为在调用query之前没有调用connect。

如果con还不存在或不活动,您应该在查询函数中添加一行来调用connect,这样您就不必记得在调用query之前调用它。

相关文章: