首页 >后端开发 >php教程 >如何修复 MySQLi 中的'在非对象上调用成员函数 fetch_assoc()”错误?

如何修复 MySQLi 中的'在非对象上调用成员函数 fetch_assoc()”错误?

Linda Hamilton
Linda Hamilton原创
2024-12-07 20:22:16443浏览

How to Fix the

对“在非对象上调用成员函数 fetch_assoc()”错误进行故障排除

使用 mysqli 扩展执行数据库查询时,可能会遇到错误“致命错误:调用非对象上的成员函数 fetch_assoc()。”当查询失败并且生成的 mysqli 结果集为空时,会发生此错误。

问题分析

在给定的代码片段中,出现错误是因为 $result 变量在执行后没有检查错误查询被执行。因此,如果查询失败,则有可能 $result 为 null,从而导致后续调用 fetch_assoc() 失败。

解决方案

要解决此问题,需要检查mysqli_query() 调用错误的结果。如果查询失败,则应抛出异常以指示错误。修改后的代码如下:

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";
    $result = $this->database->query($query);

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

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

通过添加 if (!$result) 检查,代码可确保妥善处理任何数据库错误并引发适当的异常。

以上是如何修复 MySQLi 中的'在非对象上调用成员函数 fetch_assoc()”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn