Procedimiento Almacenado para un Login MySQL

Posted by Yonatan Grajeda Cuesi On domingo, 15 de enero de 2012 2 comentarios

Que tal es dia de hoy realizare un procedimiento almacenado que según el nombre de usuario y la contraseña regresara el id del usuario si el id es diferente de cero el usuario si existe de lo contrario no existe. Esto servirá mas que todo para trabajar de una forma mas segura y no validar o hacer verificaciones dentro del código php, .NET, jsp por mencionar algunos y bueno teniendo el id del usuario se pueden hacer maravillas después.  Igual esto tambien servira de ejemplo de como utilizar los procedimientos almacenados.
El procedimiento almacenado es el siguiente:
CREATE  PROCEDURE `login_usuario`(IN nombre CHAR(30),
    IN passw CHAR(30),
    OUT existe INT,
    OUT user_name CHAR(30))
BEGIN
         SET existe=0;
         SELECT usuario_name,user_id into user_name,existe
            FROM nombre_tabla
            WHERE STRCMP(usuario_name,nombre)=0
    AND STRCMP(passw,password)=0;
END
bueno los parámetros que espero son nombre, passw(el password) como entradas es decir en MySQL cuando colocamos IN significan que ese dato es solo entrada en cambio OUT es lo que vamos a sacar y se quedara guardado luego en la base de datos que después se puede ir a verificar. También se podría colocar INOUT que servirá para los dos como entrada y salida.
El cuerpo del procedimento almacenado debe estar entreo BEGIN y END. Para asignar un valor a una variable se le coloca el SET seguido del nombre de la variable = y el valor. Este SET existe=0 se coloca por que si no encuentra nada en la consulta retornara un 0 si no se colocara esto si no encontrara la variable el resultado seria NULL o el valor vació.
Luego con una simple consulta verificamos si existe el usuario y contraseña que se esta verificando en MySQL la comparación entre strings se realiza con STRCMP si es 0 significa que son iguales las dos cadenas. Si la primer cadena es mayor devuelve 1 de lo contrario devolverá -1.
Bueno ya sabiendo todo esto se  procedera a ver como llamar a este procedimiento almacenado y como funcionara esto:
call login_usuario("yonatan","passwordprueba",@a,@b);
Bastara con realizar esta consulta para llamara a este procedimiento almacenado el @a y @b son los parametros que serviran como salida mysql.
Luego despues de hacer esto se le dara:
SELECT @a y retornara el id del usuario luego de esto si el resultado es diferente de 0 el usuario existe y se le dará SELECT @b para obtener el nombre del usuario y mostrarlo en nuestra pagina.
Feliz dia Bendiciones