php - non - Llamada a una función miembro bind_param() en un objeto no
fatal error call to a member function bind_param() on boolean in c (6)
Bueno, una de las razones por las que prepare()
puede fallar es si el enunciado sql enviado a él no es válido en el DB actual.
prepare()
devolverá falso.
Por ejemplo, si el nombre de la tabla no es correcto o uno o más campos en la consulta no existen .
Esta pregunta ya tiene una respuesta aquí:
Estoy intentando vincular una variable en esta declaración preparada, pero sigo recibiendo el error:
Call to a member function bind_param() on a non-object
Se llama a la función y se le pasan variables. Cuando cambio la función para simplemente hacer eco de la variable, la variable imprime bien en la página, pero si intento encuadernarla aquí, recibo el error. ¿Alguien puede ayudar?
//CALL FROM PAGE ONE
check($username);
//FUNCTION ON PAGE 2
function check($username){
$DBH = getDBH();
$qSelect = $DBH->prepare("SELECT * FROM users WHERE username = ?");
$qSelect->bind_param("s", $username);
}
Sé que la función no está completamente escrita aquí, pero eso no debería ser un problema. No entiendo por qué estoy recibiendo este error.
Estoy usando el enfoque mysqli también y obtuve el mismo error cuando creé otra instancia de mysqli antes de cerrar la primera instancia. Por lo tanto, es importante utilizar close()
antes de iniciar el mismo fragmento de código. Por ejemplo:
$DBH = getDBH();
$qSelect = $DBH->prepare("SELECT * FROM users WHERE username = ?");
$qSelect->bind_param("s", $username);
$qSelect->close(); // <--- use close before calling the same function( wich contains $DBH code) again;
Parece que prepararse es bastante tonto. No depende completamente de la consulta en el lado de MySQL, es decir, si en su consulta tiene una tabla que tiene el mismo nombre de palabra clave, diga "usuario", "orden", ... , simplemente no lo reconoce como una tabla, sino más bien como lo hacen los comandos de palabras clave, por lo que la consulta resulta ser un desastre y la preparación simplemente falla.
Para solucionar esto, es simple, debe escribirlo de la manera "correcta" agregando "` "en ambos lados del nombre de la tabla. Ejemplo:
`user`, `order`, `...`
Es correcto, sin embargo, me parece tonto de prepararse para tener este comportamiento.
Solo para tratar de ayudar a personas sin experiencia en PHP como yo.
En mi caso, este error ocurrió porque tuve un error en SQL sintax. El seguimiento de la pila de la consola no muestra este problema.
Cuando arreglé el SQL, el proceso salió bien.
Verifique los permisos del usuario en la base de datos. El usuario sin permiso de "inserción" provoca "Llamar a una función miembro bind_param () en un error de mensaje no objeto" también, al intentar insertar.
como dice el mensaje de error, $qSelect
parece no ser un objeto. intente depurar esto usando var_dump($qSelect);
justo después de su llamada de preparación. también verifique si getDBH()
devuelve lo que necesita.
suena como que la llamada de preparación falla (no sé por qué) y por lo tanto devuelve false
- false
no es un objeto, por lo que no puede llamar a bind_param()
sobre eso.
EDITAR: no has dado la información, pero parece que estás usando el PDO de PHP. En ese caso, eche un vistazo a la documentación .
Si el servidor de base de datos prepara con éxito la instrucción, PDO :: prepare () devuelve un objeto PDOStatement. Si el servidor de la base de datos no puede preparar la declaración correctamente, PDO :: prepare () devuelve FALSE o emite PDOException (dependiendo del manejo de errores).
Debe configurar su servidor para devolver esas Excepciones PDO, que le indicarán por qué falla la llamada de preparación.