Leila, miembro de nuestro equipo de trabajo, nos ha hecho el favor de crear esta crónica ya que controla a la perfección este tema.
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 regresar 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 haré eco de las cadenas de sentencias SQL reales y las pegaré en phpMyAdmin para probar también, pero definitivamente hay algo que falla allí).
Cada vez que recibes…
“Error fatal: llamar a una función miembro bind_param() en booleano”
… es probable que haya un problema con su consulta. los prepare()
podría volver FALSE
(un valor booleano), pero este mensaje de error genérico no deja muchas pistas. ¿Cómo saber cuál es el problema con su consulta? Tú pedir!
En primer lugar, asegúrese de que el informe de errores esté activado y visible: agregue estas dos líneas en la parte superior de su(s) archivo(s) justo después de abrirlo 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 gracia y nunca revele el true causa de cualquier problema a sus usuarios. Revelando el true causa para el 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 usar tail -f /path/to/log
en una ventana de la consola para ver los errores a medida que ocurren en tiempo real... o a medida que los comete.
Una vez que esté al tanto de 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á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 te ayuda mucho a resolver lo que está pasando.
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 vincular y ejecutar.
$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 ampliarla manejando los errores correctamente como se mencionó anteriormente.
Incluso cuando la sintaxis de consulta es correcta, preparar podría volver false, si había una sentencia anterior y no estaba cerrada. Siempre cierre su declaración anterior con
$statement->close();
Si la sintaxis es correcta, la siguiente consulta también funcionará bien.
valoraciones y reseñas
Recuerda algo, que tienes la capacidad de agregar una reseña si atinaste tu contratiempo .