【发布时间】:2019-06-02 12:54:37
【问题描述】:
如果我删除// $template->jobs = $job->getAllJobs(); //,我会得到输出,但这不是我所期望的,因为它没有从数据库中获取数据。我已经尝试了这个页面上与这个问题相关的大部分答案,但仍然得到这种错误..
<?php
class Database{
private $host = DB_HOST;
private $user = DB_USER;
private $pass = DB_PASS;
private $dbname = DB_NAME;
private $dbh;
private $error;
private $stmt;
public function __construct(){
//set DSN
$dsn= 'mysqli:host=' .$this->host .';dbname='. $this->dbname;
$options = array(
PDO::ATTR_PERSISTENT => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
);
//PDO Instances
try{
$this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
} catch(PDOException $e) {
$this->error = $e->getMessage();
}
}
public function query($query){
$this->stmt = $this->dbh->prepare($query);
}
//bind values after obtaining the values
public function bind($param, $value, $type = null){
if(is_null($type)){
switch(true){
case is_int ( $value ) :
$type = PDO::PARAM_INT;
break;
case is_bool ( $value ) :
$type = PDO::PARAM_BOOL;
break;
case is_null( $value ) :
$type = PDO::PARAM_NULL;
break;
default:
$type = PDO::PARAM_STR;
}
}
$this->stmt->bindValue($param, $value, $type);
}
public function execute(){
return $this->stmt->execute();
}
public function resultSet(){
$this->execute();
return $this->stmt->fetchAll(PDO::FETCH_OBJ);
}
public function single(){
$this->execute();
return $this->stmt->fetch(PDO::FETCH_OBJ);
}
}
//Code for job class
<?php
class Job{
private $db;
public function __construct(){
$this->db = new Database();
}
//get all jobs
public function getAllJobs(){
$this->db->query("SELECT jobs .*, categories.name AS cname FROM jobs NATURAL JOIN categories ON jobs.category_id = categories.id ORDER BY post_date DESC "); //jobs.category_id==foreignkey
$results = $this->db->resultSet();
return $results;
}
}
///code that caused problem
$job = new Job;
$template->jobs = $job->getAllJobs();
错误发生为:
致命错误:未捕获的错误:在 null in
上调用成员函数 prepare() C:\xampp\htdocs\project\lib\database.php:32 堆栈跟踪:#0
C:\xampp\htdocs\project\lib\job.php(11): Database->query('SELECT jobs .*,...') #1
C:\xampp\htdocs\project\homejoblister.php(7): Job->getAllJobs() #2 {main} 抛出
C:\xampp\htdocs\project\lib\database.php 在第 32 行
【问题讨论】: