PHP数据库类查询致命错误

时间:2015-02-12 18:41:09

标签: php oop mysqli fatal-error

民间,

让我先说明我试图学习OOP而不是使用其中一个现有的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()

我没有从测试页面获得骰子,所以我相信它可以到达数据库,我知道该表保存数据并且查询有效,因为如果我切换到非基于类的数​​据库定义,我会得到一个具有预期数据的数组。

所以我很确定这是我在课堂上创造的一个问题,我无法弄清楚它是什么。建议吗?

2 个答案:

答案 0 :(得分:0)

似乎您的对象未创建

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

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

这样做

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

答案 1 :(得分:0)

您的课程初始化很好,这不是问题。问题是它无法在con上找到查询功能,因为您在调用查询之前未调用connect。

您应该在查询功能中添加一行,以便在con尚未存在或未激活时调用connect,这样您就不必记得在调用查询之前调用它。 / p>