Php 致命错误:对非对象调用成员函数fetch_assoc()

Php 致命错误:对非对象调用成员函数fetch_assoc(),php,mysqli,Php,Mysqli,我正在尝试执行一些查询,以获得有关某些图像的信息页面。我写了一个函数 function get_recent_highs($view_deleted_images=false) { $lower = $this->database->conn->real_escape_string($this->page_size * ($this->page_number - 1)); $query = "SELECT image_id, date_uploade

我正在尝试执行一些查询,以获得有关某些图像的信息页面。我写了一个函数

function get_recent_highs($view_deleted_images=false)
{
    $lower = $this->database->conn->real_escape_string($this->page_size * ($this->page_number - 1));
    $query = "SELECT image_id, date_uploaded FROM `images` ORDER BY ((SELECT SUM( image_id=`images`.image_id ) FROM `image_votes` AS score) / (SELECT DATEDIFF( NOW( ) , date_uploaded ) AS diff)) DESC LIMIT " . $this->page_size . " OFFSET $lower"; //move to database class
    $result = $this->database->query($query);
    $page = array();
    while($row = $result->fetch_assoc())
    {
        try
        {
            array_push($page, new Image($row['image_id'], $view_deleted_images));
        }
        catch(ImageNotFoundException $e)
        {
            throw $e;
        }
    }
    return $page;
}
它会根据这些图像的流行程度选择一页。我编写了一个处理与数据库交互的
数据库
类和一个保存图像信息的
图像
类。当我试图运行此命令时,我得到一个错误

Fatal error: Call to a member function fetch_assoc() on a non-object

$result
是一个mysqli resultset,所以我不明白为什么它不起作用。

很可能是您的查询失败了,查询调用返回了一个布尔值FALSE(或某种错误对象),然后您尝试将其当作resultset对象使用,从而导致了错误。尝试类似于
var\u dump($result)
的方法,看看你真正得到了什么


在每次数据库查询调用后检查错误。即使查询本身在语法上是有效的,它也有太多的失败原因——每次检查错误都会在某个时候为您省去很多痛苦。

这是因为您的查询中有错误。错误时将返回false。将其更改为如下内容:

$result = $this->database->query($query);
if (!$result) {
    throw new Exception("Database Error [{$this->database->errno}] {$this->database->error}");
}

如果出现错误,则会引发异常…

我的查询中碰巧遗漏了空格,因此出现了此错误

Ex: $sql= "SELECT * FROM";
$sql .= "table1";

虽然这个例子看起来很简单,但在编码复杂查询时,出现这种错误的概率很高。单词“table1”前缺少空格。请检查是否已关闭数据库连接。
在我的例子中,我得到了错误,因为连接在上一行很近。

var_dump on$result确认这是一个mysqli结果集?
致命错误:当不在对象上下文中时使用$this
请检查是否已经有一个七年前的问题的可接受答案,它会告诉你同样的事情