Cada vez que obtienes el ...
"Advertencia: mysqli_fetch_object () espera que el parámetro 1 sea mysqli_result, dado booleano"
... es probable porque hay un problema con su consulta. El prepare()
o query()
podría regresar FALSE
(un booleano), pero este mensaje de falla genérico no te deja mucho en el camino de las pistas. ¿Cómo saber qué hay de malo en su consulta? Usted pregunta !
En primer lugar, asegúrese de que los informes de errores estén activados y sean visibles: agregue estas dos líneas en la parte superior de sus archivos justo después de su <?php
etiqueta de apertura :
error_reporting(E_ALL);
ini_set('display_errors', 1);
Si su informe de errores se ha configurado en php.ini, no tendrá que preocuparse por esto. Solo asegúrese de manejar los errores con gracia y nunca revele la verdadera causa de los problemas a sus usuarios. Revelar la verdadera causa al público puede ser una invitación grabada en oro para aquellos que quieran dañar sus sitios y servidores. Si no desea enviar errores al navegador, siempre puede monitorear los registros de errores de su servidor web. Las ubicaciones de registro variarán de un servidor a otro, por ejemplo, en Ubuntu, el registro de errores generalmente se encuentra en /var/log/apache2/error.log
. Si está examinando registros de errores en un entorno Linux, puede usarlos tail -f /path/to/log
en una ventana de consola para ver los errores a medida que ocurren en tiempo real ... o como los hace.
Una vez que esté al tanto de los informes de error estándar, la adición de la comprobación de errores en la conexión de su base de datos y las consultas le brindarán muchos más detalles sobre los problemas que ocurren. Eche un vistazo a este ejemplo donde el nombre de la columna es incorrecto. Primero, el código que devuelve el mensaje de error fatal genérico:
$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
$query = $mysqli->prepare($sql)); // assuming $mysqli is the connection
$query->bind_param('s', $definition);
$query->execute();
El error es genérico y no es muy útil para resolver lo que está sucediendo.
Con un par de líneas de código más, puede obtener información muy detallada que puede utilizar para resolver el problema de inmediato . Verifique que la prepare()
declaración sea veraz y, si es buena, puede proceder a la vinculación y ejecución.
$sql = "SELECT `foo` FROM `weird_words` WHERE `definition` = ?";
if($query = $mysqli->prepare($sql)) { // assuming $mysqli is the connection
$query->bind_param('s', $definition);
$query->execute();
// any additional code you need would go here.
} else {
$error = $mysqli->errno . ' ' . $mysqli->error; // 1054 Unknown column 'foo' in 'field list'
// handle error
}
Si algo está mal, puede escupir un mensaje de error que lo llevará directamente al problema. En este caso, no hay foo
columna en la tabla, resolver el problema es trivial.
Si lo desea, puede incluir esta comprobación en una función o clase y extenderla manejando los errores con gracia como se mencionó anteriormente.