1. ホーム
  2. php

[解決済み] [Solved] Fatal error: 非オブジェクトのメンバ関数fetch_assoc()の呼び出し [重複]。

2022-02-20 01:15:18

質問

いくつかのクエリを実行して、いくつかの画像に関する情報のページを取得しようとしています。私は、関数

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の結果セットなので、なぜこれが動作しないのか困惑しています。

解決方法は?

それは、クエリーにエラーがあったためです。 MySQli->query() はエラー時に false を返します。 のようなものに変更してください。

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

これでエラーがあれば例外が投げられるはずなのですが...。