El error de todos los años, superado
Esto es un clásico de todos los años. Claro, alguien podría decir que es mi culpa, que no enseño bien a mis estudiantes. Es verdad, podría ser, si no fuese porque mi asignatura es de tercer curso y su objetivo no es aprender a programar y a trabajar con bases de datos (eso ya lo han estudiado en asignaturas previas); el objetivo de la asignatura que yo imparto es aprender a desarrollar aplicaciones web.
Por comparar, es como si en una asignatura de cálculo de ecuaciones diferenciales hubiese que enseñar a los estudiantes a derivar o incluso a resolver ecuaciones lineales o incluso a sumar y multiplicar.
Por otro lado, yo sé que hay gente, compañeros, a los que no les gusta que estas cosas “se aireen”, son más de “barrer la suciedad debajo de la alfombra”. Bueno, para gustos, los colores.
Este año, como es costumbre, al llegar al acceso a la base de datos desde una página web me he encontrado el típico error de hacer una consulta y traerse todo el contenido de una tabla a la página web para buscar un único dato. ¿Y si tu tabla son los usuarios de Facebook, te vas a traer una tabla con mil millones de registros? Para muchos estudiantes, el uso de WHERE para filtrar los resultados es algo esotérico… y quizás pecaminoso.
Este año me he encontrado algo muy sorprendente e imaginativo. Tiene su valor, porque yo creo que nunca hubiese imaginado hacer eso. Por tanto, desde un punto de vista del pensamiento divergente, es genial. Sin embargo…
En la siguiente imagen podemos ver un fragmento de código. El bloque de código dentro de la condición if tiene como objetivo comprobar si el id (autonumérico, clave primaria de la tabla FOTOS) que recibe la página mediante GET pertenece a una foto de las almacenadas en la base de datos.
La sentencia “select * from FOTOS” podría tener una cláusula WHERE para buscar el id, pero no.
En vez de ello, se consulta num_rows para obtener el número de filas devueltas y comparar el id de la foto con ese número. En la siguiente condición se comprueba si el id de la foto es mayor que el número de filas: si es mayor, la foto no existe y se muestra un mensaje de error; si no es mayor, la foto existe y se continúa con el procesamiento.
¿¿¿Cómo???
Claro, la suposición aplicada en este pensamiento divergente es que el id se corresponde con el número de fotos que existen en el momento de insertar la foto, lo cual es cierto siempre que:
- El id comience siempre desde 1.
- Nunca se borre una foto.
Porque… en cuanto se borre una foto de la tabla, este código falla más que una escopeta de feria.
Y bueno, el resto del código también merece algún comentario adicional, lo dejo como ejercicio para casa para el lector interesado.
Deja un comentario