Saltar al contenido

Error fatal: excepción no detectada ‘mysqli_sql_exception’ con el mensaje ‘No se usó índice en la consulta/declaración preparada’

Después de investigar con especialistas en la materia, programadores de varias ramas y maestros hemos dado con la solución al problema y la dejamos plasmada en este post.

Solución:

El error fatal no está en MySQL; la notificación de índice faltante es una advertencia de gravedad relativamente baja.

los fatal el error está en su código PHP, debido a las siguientes tres condiciones:

  • mysqli informa un lote de advertencias, incluso para condiciones relativamente inofensivas.
  • estas lanzando mysqli_sql_exception por todos los errores y advertencias debido a su mysqli_report(MYSQLI_REPORT_ALL); línea.
  • Su código PHP no detecta esa excepción (es decir, no está en un try bloquear con un apropiado catch() bloque), y las excepciones no detectadas son fatales.

No puede hacer mucho sobre el primero, como se menciona en la otra respuesta. Por lo tanto, puede solucionarlo cambiando su mysqli_report(...) ajuste a MYSQLI_REPORT_STRICT o MYSQLI_REPORT_OFFo de hecho cualquier otra cosa que no sea MYSQLI_REPORT_ALL.

(editar: el comentario de w3d a continuación brinda una buena explicación de por qué y sugiere que podría usar mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT) como una buena alternativa)

Para las mejores prácticas, y en combinación con esto, debe corregirlo correctamente utilizando try y catch() apropiadamente dentro de su código.

mysqli_report(MYSQLI_REPORT_ALL ^ MYSQLI_REPORT_INDEX);

Desactiva “Informar si no se usó un índice o un índice incorrecto en una consulta” pero mantiene otros informes activados.

Eche un vistazo a este informe de error: #35450 La extensión mysqli informa demasiadas advertencias.

Citando algunas frases de una nota:

La extensión Mysqli arroja demasiadas advertencias.
Por ejemplo, “SELECT * FROM table” da como resultado una advertencia: “Advertencia: mysqli::query(): No se usa índice en la consulta/declaración preparada SELECT * FROM table …”

Y, citando otra nota, que me parece interesante:

Usar mysqli_report() para deshabilitar eso.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *