En mi entorno local / de desarrollo, la consulta de MySQLi funciona correctamente. Sin embargo, cuando lo cargo en mi entorno de alojamiento web, aparece este error:
Error fatal: llamada a una función miembro bind_param () en un no objeto en ...
Aquí está el código:
global $mysqli;
$stmt = $mysqli->prepare("SELECT id, description FROM tbl_page_answer_category WHERE cur_own_id = ?");
$stmt->bind_param('i', $cur_id);
$stmt->execute();
$stmt->bind_result($uid, $desc);
Para verificar mi consulta, intenté ejecutar la consulta a través del panel de control phpMyAdmin y el resultado es correcto.
A veces, su código MySQLi produce un error como mysqli_fetch_assoc() expects parameter...
, Call to a member function bind_param()...
o similar. O incluso sin ningún error, pero la consulta no funciona igual. Significa que su consulta no se pudo ejecutar.
Cada vez que falla una consulta, MySQL tiene un mensaje de error que explica el motivo . Desafortunadamente, de forma predeterminada, estos errores no se transfieren a PHP, y todo lo que tiene es un mensaje de error críptico mencionado anteriormente. Por lo tanto, es muy importante configurar PHP y MySQLi para informarle de los errores de MySQL. Y una vez que reciba el mensaje de error, solucionarlo será pan comido.
En primer lugar, tenga siempre esta línea antes de que MySQLi se conecte en todos sus entornos:
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
Después de eso, todos los errores de MySQL se transferirán a las excepciones de PHP. La excepción no detectada, a su vez, produce un error fatal de PHP. Por lo tanto, en caso de un error de MySQL, obtendrá un error de PHP convencional. Eso le informará instantáneamente de la causa del error. Y un seguimiento de la pila lo llevará al lugar exacto donde ocurrió el error.
Aquí está una parte esencial de mi artículo sobre informes de errores de PHP : Los
informes de errores en un servidor de desarrollo y en vivo deben ser diferentes. En un servidor de desarrollo, es conveniente que los errores se muestren en pantalla, pero en un servidor en vivo los mensajes de error deben registrarse en su lugar, para que pueda encontrarlos en el registro de errores más tarde.
Por lo tanto, debe establecer las opciones de configuración correspondientes a los siguientes valores:
En un servidor de desarrollo
error_reporting
debe establecerse en E_ALL
valor;log_errors
debe establecerse en 1 (también es conveniente tener registros en una PC de desarrollo)display_errors
debe establecerse en 1 En un servidor de producción
error_reporting
debe establecerse en E_ALL
valor;log_errors
debe establecerse en 1display_errors
debe establecerse en 0 Basta con retirar cualquier código que comprueba el error de forma manual , a todos aquellos or die()
, if ($result)
y tales. Simplemente escriba el código de interacción de su base de datos de inmediato:
$stmt = $this->con->prepare("INSERT INTO table(name, quantity) VALUES (?,?)");
$stmt->bind_param("si", $name, $quantity);
$stmt->execute();
de nuevo, sin condiciones a su alrededor . Si ocurre un error, será tratado como cualquier otro error en su código. Por ejemplo, en una PC de desarrollo, simplemente aparecerá en la pantalla, mientras que en un sitio en vivo se registrará para un programador, mientras que para la conveniencia del usuario podría usar un controlador de errores (pero esa es una historia diferente que está fuera de tema para MySQLi, pero puede leerlo en el artículo vinculado anteriormente).
Primero que nada tienes que localizar la consulta del problema. El mensaje de error contiene el nombre del archivo y el número de línea del lugar exacto donde ocurrió el error. Para el código simple, eso es suficiente, pero si su código usa funciones o clases, es posible que deba seguir el seguimiento de la pila para ubicar la consulta del problema.
Después de recibir el mensaje de error, debe leerlo y comprenderlo. Suena demasiado obvio, si no condescendiente, pero los alumnos a menudo pasan por alto el hecho de que el mensaje de error no es solo una señal de alarma, sino que en realidad contiene una explicación detallada del problema . Y todo lo que necesita es leer el mensaje de error y solucionar el problema.
Si no comprende el mensaje de error, intente buscarlo en Google. Y cuando examine los resultados, limítese a las respuestas que expliquen el error en lugar de dar la solución sin rodeos. Es posible que una solución no funcione en su caso particular, pero la explicación lo ayudará a comprender el problema y le permitirá solucionarlo usted mismo.
También debe confiar en el mensaje de error. Si dice que el número de tokens no coincide con el número de variables vinculadas, entonces es así. Lo mismo ocurre con las tablas o columnas ausentes. Si tiene la opción, ya sea que sea su propio error o que el mensaje de error sea incorrecto, siga siempre el primero. Una vez más, suena condescendiente, pero cientos de preguntas en este mismo sitio demuestran que este consejo es extremadamente útil.
@
)! Hace que un programador no pueda leer el mensaje de error y, por lo tanto, no pueda corregir el error.die()
ni echo
ninguna otra función para imprimir el mensaje de error en la pantalla de forma incondicional. PHP puede informar errores por sí mismo y hacerlo de la manera correcta depende del entorno, así que déjelo para PHP.if($result)
). Con las excepciones de error habilitadas, tal condición será inútil.try..catch
operador para repetir el mensaje de error. Este operador debe usarse para realizar algún manejo de errores, como una reversión de transacciones. Pero nunca lo use solo para informar errores; como aprendimos anteriormente, PHP ya puede hacerlo, de la manera correcta.PD:
A veces no hay error, pero tampoco resultados. Entonces significa que no hay datos en la base de datos que coincidan con sus criterios . En este caso, debe admitir este hecho, incluso si puede jurar que los datos y los criterios son correctos. No son. Tienes que comprobarlos de nuevo. Tengo un artículo que puede ayudar en este asunto, Cómo depurar interacciones de bases de datos . Aunque está escrito para PDO, el principio es el mismo. Simplemente siga estas instrucciones paso a paso y resuelva su problema o tenga una pregunta que pueda responder para Stack Overflow.
La estrella de HGTV, Christina Hall, revela que le diagnosticaron envenenamiento por mercurio y plomo, probablemente debido a su trabajo como manipuladora de casas.
Recientemente salió a la luz un informe policial que acusa a la estrella de 'Love Is Blind', Brennon, de violencia doméstica. Ahora, Brennon ha respondido a los reclamos.
Conozca cómo Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia mientras organizaba la primera celebración de Acción de Gracias desde que murió su madre, Naomi Judd.
Descubra por qué un destacado experto en lenguaje corporal cree que es fácil trazar "tales paralelismos" entre la princesa Kate Middleton y la princesa Diana.
Los inodoros arrojan columnas de aerosol invisibles con cada descarga. ¿Como sabemos? La prueba fue capturada por láseres de alta potencia.
Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?
The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!
¿Sigue siendo efectivo ese lote de repelente de insectos que te quedó del verano pasado? Si es así, ¿por cuánto tiempo?
Las mujeres del Reino Unido acuden a las urnas para las elecciones especiales de hoy en un aniversario particularmente apropiado. Han pasado 104 años desde que Emily Wilding Davison murió por la causa del sufragio femenino, pisoteada hasta la muerte en medio de una carrera de caballos de alto perfil, frente al Rey y la Reina.
Tapas elásticas de silicona de Tomorrow's Kitchen, paquete de 12 | $14 | Amazonas | Código promocional 20OFFKINJALids son básicamente los calcetines de la cocina; siempre perdiéndose, dejando contenedores huérfanos que nunca podrán volver a cerrarse. Pero, ¿y si sus tapas pudieran estirarse y adaptarse a todos los recipientes, ollas, sartenes e incluso frutas en rodajas grandes que sobran? Nunca más tendrás que preocuparte por perder esa tapa tan específica.
Hemos pirateado algunas ciudades industriales en esta columna, como Los Ángeles y Las Vegas. Ahora es el momento de una ciudad militar-industrial-compleja.
Un minorista está enlatando su sección de tallas grandes. Pero no están tomando la categoría solo en línea o descontinuándola por completo.
El equipo está a la espera de las medallas que ganó en los Juegos Olímpicos de Invierno de 2022 en Beijing, ya que se está resolviendo un caso de dopaje que involucra a la patinadora artística rusa Kamila Valieva.
Miles de compradores de Amazon recomiendan la funda de almohada de seda Mulberry, y está a la venta en este momento. La funda de almohada de seda viene en varios colores y ayuda a mantener el cabello suave y la piel clara. Compre las fundas de almohada de seda mientras tienen hasta un 46 por ciento de descuento en Amazon
El jueves se presentó una denuncia de delito menor amenazante agravado contra Joe Mixon.
El Departamento de Policía de Lafayette comenzó a investigar a un profesor de la Universidad de Purdue en diciembre después de recibir varias denuncias de un "hombre sospechoso que se acercaba a una mujer".
Al igual que el mundo que nos rodea, el lenguaje siempre está cambiando. Mientras que en eras anteriores los cambios en el idioma ocurrían durante años o incluso décadas, ahora pueden ocurrir en cuestión de días o incluso horas.
Estoy de vuelta por primera vez en seis años. No puedo decirte cuánto tiempo he estado esperando esto.
“And a river went out of Eden to water the garden, and from thence it was parted and became into four heads” Genesis 2:10. ? The heart is located in the middle of the thoracic cavity, pointing eastward.
Creo, un poco tarde en la vida, en dar oportunidades a la gente. Generosamente.