【问题标题】:Fatal error: Call to a member function fetch_assoc() on a non-object [duplicate]致命错误:在非对象上调用成员函数 fetch_assoc() [重复]
【发布时间】:2011-07-04 12:14:06
【问题描述】:

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

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;
}

根据它们的受欢迎程度选择这些图像的页面。我编写了一个处理与数据库交互的Database 类和一个保存有关图像信息的Image 类。当我尝试运行它时,我得到一个错误。

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

$result 是一个 mysqli 结果集,所以我很困惑为什么这不起作用。

【问题讨论】:

  • var_dump on $result 确认它是 mysqli 结果集?

标签: php mysqli


【解决方案1】:

请检查您是否已经关闭数据库连接。 在我的情况下,我收到了错误,因为连接在上面一行是关闭的。

【讨论】:

  • 请检查一个七(!)岁的问题是否已经有一个可以接受的答案,它会告诉你同样的事情
【解决方案2】:

我碰巧在我的查询中遗漏了空格并且出现了这个错误。

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

虽然该示例可能看起来很简单,但在编写复杂查询时,出现此错误的概率很高。我在单词“table1”之前缺少空格。

【讨论】:

    【解决方案3】:

    那是因为您的查询中有错误。 MySQli->query() 将在错误时返回 false。将其更改为::

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

    如果有错误应该抛出异常...

    【讨论】:

    • Fatal error: Using $this when not in object context
    【解决方案4】:

    您的查询很可能失败,并且查询调用返回了一个布尔值 FALSE(或某种错误对象),然后您尝试将其用作结果集对象,从而导致错误。试试var_dump($result) 之类的东西,看看你真正得到了什么。

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

    【讨论】:

      猜你喜欢
      • 2016-08-30
      • 2012-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多