{"id":4601,"date":"2018-02-12T09:00:02","date_gmt":"2018-02-12T08:00:02","guid":{"rendered":"https:\/\/blogs.ua.es\/pi\/?p=4601"},"modified":"2020-05-21T18:14:19","modified_gmt":"2020-05-21T16:14:19","slug":"el-error-de-todos-los-anos-superado","status":"publish","type":"post","link":"https:\/\/blogs.ua.es\/pi\/2018\/02\/12\/el-error-de-todos-los-anos-superado\/","title":{"rendered":"El error de todos los a\u00f1os, superado"},"content":{"rendered":"<p>Esto es un <a href=\"https:\/\/blogs.ua.es\/pi\/2017\/01\/04\/el-clasico-de-todos-los-anos\/\">cl\u00e1sico de todos los a\u00f1os<\/a>. Claro, alguien podr\u00eda decir que es mi culpa, que no ense\u00f1o bien a mis estudiantes. Es verdad, podr\u00eda 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.<\/p>\n<p>Por comparar, es como si en una asignatura de c\u00e1lculo de ecuaciones diferenciales hubiese que ense\u00f1ar a los estudiantes a derivar o incluso a resolver ecuaciones lineales o incluso a sumar y multiplicar.<\/p>\n<p>Por otro lado, yo s\u00e9 que hay gente, compa\u00f1eros, a los que no les gusta que estas cosas &#8220;se aireen&#8221;, son m\u00e1s de &#8220;barrer la suciedad debajo de la alfombra&#8221;. Bueno, <a href=\"https:\/\/cvc.cervantes.es\/lengua\/refranero\/ficha.aspx?Par=59547&amp;Lng=0\">para gustos, los colores<\/a>.<\/p>\n<p>Este a\u00f1o, como es costumbre, al llegar al acceso a la base de datos desde una p\u00e1gina web me he encontrado el t\u00edpico error de hacer una consulta y traerse todo el contenido de una tabla a la p\u00e1gina web para buscar un \u00fanico dato. \u00bfY 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\u00e9rico&#8230; y quiz\u00e1s pecaminoso.<\/p>\n<p>Este a\u00f1o 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 <a href=\"https:\/\/es.wikipedia.org\/wiki\/Pensamiento_divergente\">pensamiento divergente<\/a>, es genial. Sin embargo&#8230;<\/p>\n<p>En la siguiente imagen podemos ver un fragmento de c\u00f3digo. El bloque de c\u00f3digo dentro de la condici\u00f3n if tiene como objetivo comprobar si el id (autonum\u00e9rico, clave primaria de la tabla FOTOS) que recibe la p\u00e1gina mediante GET pertenece a una foto de las almacenadas en la base de datos.<\/p>\n<p>La sentencia &#8220;select * from FOTOS&#8221; podr\u00eda tener una cl\u00e1usula WHERE para buscar el id, pero no.<\/p>\n<p><a href=\"https:\/\/blogs.ua.es\/pi\/files\/2017\/12\/num_rows-contar.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-medium wp-image-4602\" src=\"https:\/\/blogs.ua.es\/pi\/files\/2017\/12\/num_rows-contar-300x155.jpg\" alt=\"\" width=\"300\" height=\"155\" srcset=\"https:\/\/blogs.ua.es\/pi\/files\/2017\/12\/num_rows-contar-300x155.jpg 300w, https:\/\/blogs.ua.es\/pi\/files\/2017\/12\/num_rows-contar-768x397.jpg 768w, https:\/\/blogs.ua.es\/pi\/files\/2017\/12\/num_rows-contar-1024x529.jpg 1024w\" sizes=\"auto, (max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<p>En vez de ello, se consulta num_rows para obtener el n\u00famero de filas devueltas y comparar el id de la foto con ese n\u00famero. En la siguiente condici\u00f3n se comprueba si el id de la foto es mayor que el n\u00famero 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\u00faa con el procesamiento.<\/p>\n<p>\u00bf\u00bf\u00bfC\u00f3mo???<\/p>\n<p>Claro, la suposici\u00f3n aplicada en este pensamiento divergente es que el id se corresponde con el n\u00famero de fotos que existen en el momento de insertar la foto, lo cual es cierto siempre que:<\/p>\n<ol>\n<li>El id comience siempre desde 1.<\/li>\n<li>Nunca se borre una foto.<\/li>\n<\/ol>\n<p>Porque&#8230; en cuanto se borre una foto de la tabla, este c\u00f3digo falla m\u00e1s que una escopeta de feria.<\/p>\n<p>Y bueno, el resto del c\u00f3digo tambi\u00e9n merece alg\u00fan comentario adicional, lo dejo como ejercicio para casa para el lector interesado.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Esto es un cl\u00e1sico de todos los a\u00f1os. Claro, alguien podr\u00eda decir que es mi culpa, que no ense\u00f1o bien a mis estudiantes. Es verdad, podr\u00eda ser, si no fuese porque mi asignatura es de tercer curso y su objetivo &hellip;<\/p>\n<p class=\"read-more\"> <a class=\"more-link\" href=\"https:\/\/blogs.ua.es\/pi\/2018\/02\/12\/el-error-de-todos-los-anos-superado\/\"> <span class=\"screen-reader-text\">El error de todos los a\u00f1os, superado<\/span> Leer M\u00e1s  &raquo;<\/a><\/p>\n","protected":false},"author":40,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[1536,6231],"class_list":["post-4601","post","type-post","status-publish","format-standard","hentry","category-general","tag-aprender","tag-error"],"_links":{"self":[{"href":"https:\/\/blogs.ua.es\/pi\/wp-json\/wp\/v2\/posts\/4601","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.ua.es\/pi\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.ua.es\/pi\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.ua.es\/pi\/wp-json\/wp\/v2\/users\/40"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.ua.es\/pi\/wp-json\/wp\/v2\/comments?post=4601"}],"version-history":[{"count":1,"href":"https:\/\/blogs.ua.es\/pi\/wp-json\/wp\/v2\/posts\/4601\/revisions"}],"predecessor-version":[{"id":4603,"href":"https:\/\/blogs.ua.es\/pi\/wp-json\/wp\/v2\/posts\/4601\/revisions\/4603"}],"wp:attachment":[{"href":"https:\/\/blogs.ua.es\/pi\/wp-json\/wp\/v2\/media?parent=4601"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.ua.es\/pi\/wp-json\/wp\/v2\/categories?post=4601"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.ua.es\/pi\/wp-json\/wp\/v2\/tags?post=4601"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}