Solución:
El problema radica en:
$query = $this->db->conn->prepare('SELECT value, param FROM ws_settings WHERE name = ?');
$query->bind_param('s', $setting);
los prepare()
el método puede volver false
y deberías comprobarlo. En cuanto a por qué regresa false
, tal vez el nombre de la tabla o los nombres de las columnas (en SELECT
o WHERE
cláusula) no son correctas?
Además, considere el uso de algo como $this->db->conn->error_list
para examinar los errores que ocurrieron al analizar el SQL. (Ocasionalmente hago eco de las cadenas de declaraciones SQL reales y las pego en phpMyAdmin para probar también, pero definitivamente hay algo que falla).
Cada vez que obtienes el …
“Error fatal: llamada a una función miembro bind_param () en boolean”
… es probable que haya un problema con su consulta. los prepare()
podría volver FALSE
(un booleano), pero este mensaje de error genérico no deja muchas pistas. ¿Cómo averigua cuál es el problema de su consulta? usted pedir!
En primer lugar, asegúrese de que el informe de errores esté activado y sea visible: agregue estas dos líneas en la parte superior de su (s) archivo (s) justo después de su apertura <?php
etiqueta:
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 elegancia 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 los registros 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 utilizar tail -f /path/to/log
en una ventana de consola para ver los errores a medida que ocurren en tiempo real … o a medida que los comete.
Una vez que haya terminado con los informes de errores estándar, agregar la verificación de errores en la conexión de su base de datos y las consultas le brindará muchos más detalles sobre los problemas que están ocurriendo. 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 más de código, puede obtener información muy detallada que puede usar para resolver el problema. inmediatamente. Comprobar el prepare()
declaración de veracidad 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;
echo $error; // 1054 Unknown column 'foo' in 'field list'
}
Si algo está mal, puede escupir un mensaje de error que lo lleva directamente al problema. En este caso no hay foo
columna de la tabla, resolver el problema es trivial.
Si lo desea, puede incluir esta verificación en una función o clase y extenderla manejando los errores con elegancia como se mencionó anteriormente.
Incluso cuando la sintaxis de la consulta es correcta, preparar podría devolver falso, si había una declaración anterior y no estaba cerrada. Cierre siempre su estado de cuenta anterior con
$statement->close();
Si la sintaxis es correcta, la siguiente consulta también se ejecutará bien.