いくつかの画像に関する情報のページを取得するためにいくつかのクエリを実行しようとしています。関数を作成しました
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 の結果セットなので、なぜこれが機能しないのか不思議です。
ベストアンサー1
クエリにエラーがあったためです。MySQli->query()
エラーの場合は false を返します。次のように変更します::
$result = $this->database->query($query);
if (!$result) {
throw new Exception("Database Error [{$this->database->errno}] {$this->database->error}");
}
エラーが発生した場合は例外がスローされるはずです...