Home >Backend Development >PHP Tutorial >求大神纠错,谢谢Fatal error: Call to a member function query() on a non-object

求大神纠错,谢谢Fatal error: Call to a member function query() on a non-object

WBOY
WBOYOriginal
2016-06-23 13:46:151232browse

如题,出现错误。Fatal error: Call to a member function query() on a non-object in D:\WWW\2shou\class\Bulletin.php on line 47
代码如下: 
//本类用于保存对表Bulletin的数据库访问操作
//表的每个字段对应类的一个成员变量
Class Bulletin
{
  public $Id; // 记录编号
  public $Title; // 公告标题
  public $Content; // 公告内容
  public $PostTime; // 发布日期
  public $Poster; // 发布人
  var $conn;

  function __construct() {
// 连接数据库
$this->conn = mysqli_connect("localhost", "root", "pass", "2shou"); 
mysqli_query($this->conn, "SET NAMES gbk");
  }

  function __destruct() {
// 关闭连接
mysqli_close($this->conn);
  }

  // 获取公告信息
  function GetBulletinInfo($bid)  {
//设置查询的SELECT语句
  $sql = "SELECT * FROM Bulletin WHERE Id='" . $bid . "'";
// 打开记录集
    $results = $this->conn->query($sql);
// 读取公告数据
if($row = $results->fetch_row())  {
     $this->Id = $bid;
  $this->Title = $row[1];
  $this->Content = $row[2];
  $this->PostTime = $row[3];
      $this->Poster = $row[4];
}
else {
  $this->Id=0;
}
  }

  // 获取所有公告信息,返回结果集
  function GetBulletinlist()  {
//设置查询的SELECT语句
$sql = "SELECT * FROM Bulletin ORDER BY PostTime DESC";
    $results = $this->conn->query($sql);
    return $results;
  }

  // 获取所有公告信息,返回结果集
  function GetRecentBulletinlist()  {
//设置查询的SELECT语句
$sql = "SELECT * FROM Bulletin WHERE DateDiff(day, getdate(), Posttime)     $results = $this->conn->query($sql);
    return $results;
  }

  // 添加公告信息
  function insert()  {
    $sql = "INSERT INTO Bulletin (Title, Content, PostTime, Poster) VALUES ('" . $this->Title . "','" . $this->Content . "','" . $this->PostTime . "','" . $this->Poster . "')";
// 执行SQL语句
$this->conn->query($sql);
  }

  // 修改公告信息
  function update($bid)  {
    $sql = "UPDATE Bulletin SET Title='" . $this->Title . "', Content='" . $this->Content . "', PostTime='" . $this->PostTime . "', Poster='" . $this->Poster . "' WHERE Id=" . $bid;
    // 执行SQL语句
$this->conn->query($sql);
  }

  // 批量删除公告信息
  function delete($bid)  {
    $sql = "DELETE FROM Bulletin WHERE Id IN (" . $bid . ")";
    // 执行SQL语句
$this->conn->query($sql);
  }
}
?>


回复讨论(解决方案)

你在构造函数中
 function __construct() {
    // 连接数据库
    $this->conn = mysqli_connect("localhost", "root", "pass", "2shou"); 
    mysqli_query($this->conn, "SET NAMES gbk");
 }
所以 $this->conn 是资源
但你在其他方法中却用 $results = $this->conn->query($sql); 进行访问
那么 $this->conn 什么时候又变成对象了呀?

所以构造函数应写作

function __construct() {  $this->conn = new mysqli("localhost", "root", "pass", "2shou");  $this->conn->set_charset('gbk');}

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn