TYPENEU, una odisea en tipografía …
Asi reza el slogan de TypeNeu.
TypeNeu es una web que recopila distintas aplicaciones y experimentos tipográficos, que os recomiendo echeis un vistazo. Se ven trabajos buenos, muy buenos.
Espero que os guste, a mi me encanta.
Generar consultas SQL dinámicamente desde Flash para AMFPHP
Desde hace bastante tiempo, uso AMFPHP en la mayoría de los proyectos. Si ya lo habeis usado, sabreis lo cómodo, útil, y práctico que resulta, y si no lo habeis hecho, os recomiendo que lo descargueis y le hecheis un vistazo en cuanto tengais un rato.
Cuando llevaba un tiempo trabajando con él, me fastidiaba bastante tener que escribir un servicio de AMFPHP cada vez que quería realizar cualquier cosa, de modo que si un proyecto tenia seccion de noticias, galeria de fotos, novedades o lo que fuera, tenias que andar escribiendo un nuevo servicio por cada uno de ellos. Como no, si tenias que variar cualquier cosa en tu aplicacion, tenias que tocar la clase correspondiente, y el servicio, no era un trabajo dificil, pero si demasiado repetitivo …. ¿ Por que ?
Dandole vueltas, realmente te das cuenta que siempre haces lo mismo en un servicio, usas SELECT, INSERT, UPDATE y DELETE, esto cubre el 95% de los casos, y ocasionalmente, usas un SEARCH.
¿ Y si genero mi consulta SQL en flash, y simplemente uso un servicio único AMFPHP que haga de proxy ? De esta forma, me olvidaría por completo de tener que estar generando servicios constantemente, y ademas, podría generar todo desde flash, ahorrandome tener que pasar tantisimos parámetros …
A raíz de ahi, surgio la clase GenerateSQL. Es una clase que empece a usar hace un par de años, y que con el tiempo se ha ido refactorizando y portado a AS3. Su fucionamiento es bastante sencillo, una vez le coges el hilo, puedes generar consultas complejas muy muy rápido y directamente desde flash.
Vamos a un ejemplo sencillo, un típico SELECT :
/* param:
@elements: [nombre_columna_BD,......]
@tabla: tabla_BD
@myID: [[nombre_id,valor],….]
@limit: Number
@order: [nombre_columna_BD, order_type] - order_type: ASC // DESC
@option : AND // OR
*/
public static function GenerateSelect(elements:Array,tabla:String,myID:Array, order:Array, limit:Number, option:String = “”):String
Como vereis, hay opciones varias para generar el SELECT. El primer array, son las columnas a seleccionar, el segundo la tabla, el tercero las distintas condiciones ( WHERE …. ) y luego, distintas opciones de limite, ordenacion, y concatenación.
Al lío ( Ej. AS3 ) :
import GenerateSQL;
var tmpSTR:String = GenerateSQL.GenerateSelect ( [],”productos”,[],[],undefined,undefined );
trace(tmpSTR)
Resultado :
SELECT*FROM productos
Vale, esto es bastante básico, y sencillo. Vamos a algo un poco mas completo, voy a obviar los import y demas para ir a lo que nos interesa :
var tmpSTR:String = SQL.GenerateSelect ( ["id","nombre","apellidos"],”productos”,[["edad",15]],[],undefined,undefined );
y obtendríamos :
SELECT`id`, `nombre`, `apellidos`FROM productos WHERE `edad`=15
Bueno, ya veis como se pueden obtener facilmente consultas que van siendo mas complejas a medida que lo necesitemos. Es bastante cómodo ademas, puesto que siempre puedes ver exactamente “que” estas enviando a tu servicio, de modo que sabes perfectamente si hay un error en esa consulta, incluso si te apetece, pegas tu consulta generada en tu phpMyAdmin y ves que te genera.
No me extiendo más en esto, pues es sencillo probar y ver que tal funcionan los diferentes métodos, para los inserts, updates, deletes, y lleva dos métodos para generar búsquedas simples y complejas.
Una vez visto toda esta movida, vale, y ahora que ?. Esta consulta que generamos en flash, se la vamos a pasar a nuestro servicio de AMFPHP. Este servicio, siempre sera igual, no hay ni que tocarlo, y simplemente nos devolverá nuestro resultado perfectamente parseado como recordSet.
En el caso de enviar tanto un insert, update o delete, nos va a devolver simplemente un “ok”, o bien el error que haya generado el SQL.
Tampoco voy a entrar en como enviar los datos a tu servicio, pues esto esta bastante documentado en la red, y probablemente muchos de vosotros ya sepais como funciona, simplemente añadir, que no es para nada complicado.
Con esta clase, se hace bastante rapido ir desarrollando cualquier interaccion con la BD, me resulta super comoda para los insert y updates, pues normalmente recojo los datos en un array, y solo es pasarlo y fuera.
Importante. Como muchos habeis ya adivinado, usar este sistema asi “a pelo”, es muy muy peligroso. Te pueden inyectar código muy fácilmente, y hacerte un DROP de la leche …. ( Actualizo : Ojo a los permisos de la BD, con esto ya te ahorras muchos problemas… )
Ya depende de cada uno, y del proyecto, el establecer la seguridad que cada uno estime oportuna. Yo lo uso encriptando previamente desde flash, y desencriptando posteriormente en el propio servicio de AMF, de modo que la informacion viaje de forma segura permanentemente.
Aqui os dejo los archivos, la clase y el servicio, por si quereis hecharle un ojo :
Bueno, blog estrenado ! xD

