Las aplicaciones web de PHP generalmente necesitan una gran cantidad de interacciones con la base de datos, a fin de enviar y recibir información. Esto generalmente se traduce en queries de SQL que quedan harcoded dentro de los scripts PHP. Sin embargo, a pesar de ser hasta cierto punto práctico, en proyectos grandes y que necesitan la colaboración de distintas personas este enfoque resulta ser ineficiente y suele convertirse en una fuente de problemas y errores.

Por otra parte, una separación de los scripts y los parámetros que necesitan para funcionar sería una alternativa bastante atractiva y eficiente. MS Sql Server nos da la oportunidad de almacenar mucha de esta información dentro de la misma base de datos, a fin de que exista un punto central en donde crear y mantener dichas queries, haciendo aún mas clara la división entre capas, siguiendo el modelo MVC.

Un ejemplo típico de una aplicación PHP y su interacción con la base de datos es la autenticación de un usuario, pidiéndole el nombre y la contraseña, a fin de dar o denegar la entrada a un sistema. Generalmente, tenemos una forma en HTML que se comunicará con un script, en donde se hará la conexión con la base de datos. Algo muy común es tener una forma como esta:

 

Y en este caso, el script de PHP para ejecutar una consulta en SQL basándose en esta forma, quedaría como sigue:

Esta claro que este es un ejemplo muy sencillo y por lo mismo aún necesitaría mas cosas para considerarse una aplicación del mundo real. Sin embargo, funcionará para los propósitos de este caso de estudio. En este script se nota que la sentencia SQL se encuentra completamente integrada y para cambiarla es necesario entrar a la aplicación que la está utilizando. Esto se convierte en una tarea demasiado pesada cuando se tienen innumerables consultas distribuidas en muchos lugares a lo largo de nuestra aplicación. De igual manera, al obtener los parámetros de esta forma se deja la oportunidad a cualquier persona a intentar un Sql Injection, para modificar la sentencia y ganar acceso al sistema. Esta técnica de entrada a sistemas la veremos en un artículo posterior dedicado a la seguridad.

Para eliminar este tipo de programación alambrada, lo primero es crear un procedimiento del lado de MS Sql Server. Un ejemplo, para seguir con este caso de estudio sería el siguiente:

Aqu í estamos creado un procedimiento el cuál recibirá dos parámetros, el nombre del usuario y su contraseña, para después ejecutar una serie de instrucciones basadas en esos datos. En este caso, la única instrucción a ejecutarse es un SELECT, tomando como premisa que si el resultado es un conjunto vacío, la combinación del usuario y su contraseña es incorrecta y por lo tanto, no tiene derecho a acceder al sistema. Este procedimiento toma el nombre de Authenticate, que será el nombre con el cual se llamará desde el exterior.

Ahora, es necesario que PHP cuente con una manera de establecer la conexión, obtener el procedimiento y ejecutarlo, pasándole los parámetros necesarios. Para tal efecto, se requiere la creación de un objeto de tipo Query, que recibe un String correspondiente al procedimiento que queremos utilizar:

Para hacer uso de este procedimiento, el valor de salida tendría que definirse también, a diferencia del ejemplo que aquí mostramos. Una posible definición del mismo sería como sigue:

Pensando siempre que la selección de este resultado se puede depositar en un entero. Como se trata de una instrucción de tipo COUNT, parece ser una solución razonable.

Vimos como las consultas en SQL pueden crearse y mantenerse de una forma centralizada, evitándonos alambrar las cosas dentro de nuestro código PHP. Otras ventajas de los procedimientos del lado de las bases de datos son la de disminuir el tráfico de la red, confiabilidad de los resultados, seguridad contra las inyecciones de código y finalmente, división mas clara de las capas del modelo MVC.

Popularidad: 18%