uncaught una solucion miembro llamada función fetch_assoc fetch_array fatal error detectado booleano php mysql

php - solucion - Error fatal: llamada a una función miembro fetch_assoc() en un objeto no objeto



llamada a una función miembro fetch_assoc() on boolean (4)

Estoy intentando ejecutar algunas consultas para obtener una página de información sobre algunas imágenes. He escrito una función

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

que selecciona una página de estas imágenes en función de su popularidad. Escribí una clase de Database que maneja las interacciones con la base de datos y una clase de Image que contiene información sobre una imagen. Cuando intento ejecutar esto obtengo un error.

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

$result es un conjunto de resultados mysqli, así que estoy desconcertado sobre por qué esto no está funcionando.


Eso es porque hubo un error en su consulta. MySQli->query() devolverá falso en caso de error. Cambiarlo a algo como ::

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

Eso debería arrojar una excepción si hay un error ...


Falto espacios en mi consulta y aparece este error.

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

Aunque el ejemplo podría parecer simple, al codificar consultas complejas, la probabilidad de este error es alta. Me faltaba espacio antes de la palabra "mesa1".


Probablemente su consulta falló, y la llamada a la consulta devolvió un valor booleano FALSE (o un objeto de error de algún tipo), que luego intenta utilizar como si fuera un objeto de conjunto de resultados, causando el error. Pruebe algo como var_dump($result) para ver lo que realmente tiene.

Compruebe si hay errores después de CADA LLAMADA de consulta de base de datos. Incluso si la consulta en sí es sintácticamente válida, existen demasiados motivos para que falle de todos modos; la comprobación de errores siempre le ahorrará mucho dolor en algún momento.


Verifique si ya ha cerrado la conexión de la base de datos o no. En mi caso, recibí el error porque la conexión estaba cerca en la línea superior.