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 sumysqli_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 apropiadocatch()
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_OFF
o 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.