Problemas con procedimiento almacenado en mysql

Iniciado por 3n31ch, 4 Julio 2015, 02:49 AM

0 Miembros y 1 Visitante están viendo este tema.

3n31ch

Hola buenas, ¿como están?.
Bueno, les cuento, hace un tiempo que no he trabajado con bases de datos y he perdido un poco la practica.

Requiero hacer un procedimiento almacenado, cuyo unico propocito sea insertar los datos (email, password, role) en una tabla llamada user.

Quiero que la password se encripte con MD5, pero no hay manera.... no se que estoy haciendo mal. Espero me puedan ayudar. Este es el codigo que estoy utilizando:

Código (sql) [Seleccionar]
CREATE PROCEDURE `sp_user_insert` (IN `sp_email` VARCHAR(255), IN `sp_password` TEXT, IN `sp_role` INT)
BEGIN
DECLARE `sp_encrypted_password` TEXT;
SET `sp_encrypted_password` = (SELECT MD5(`sp_encrypted_password`));
INSERT INTO `user`( `user_email`, `user_password`, `user_role_id`) VALUES ( `sp_email`, `sp_encrypted_password`, `sp_role`);
END


Por si lo requieren, esta es la tabla:

Código (sql) [Seleccionar]
CREATE TABLE IF NOT EXISTS `user` (
 `user_id` int(11) NOT NULL AUTO_INCREMENT,
 `user_email` varchar(255) NOT NULL,
 `user_password` text NOT NULL,
 `user_role_id` int(11) NOT NULL,
 PRIMARY KEY (`user_id`)
);

0roch1

En principio lo que debes hacer es analizar la longitud de los campos para una mejor optimización de la base de datos.

Código (sql) [Seleccionar]

CREATE TABLE IF NOT EXISTS `user` (
 `user_id` INT(6) NOT NULL AUTO_INCREMENT,
 `user_email` VARCHAR(360) NOT NULL,
 `user_password` VARCHAR(32) NOT NULL,
 `user_role_id` INT(2) NOT NULL,
 PRIMARY KEY (`user_id`)
);


En tu procedimiento el SELECT está de más al momento de llamar la función MD5
Código (sql) [Seleccionar]

DELIMITER $$

CREATE
   PROCEDURE `prueba`.`sp_user_insert`(IN `sp_email` VARCHAR(360), IN `sp_password` VARCHAR(100), IN `sp_role` INT(2) )
   
   BEGIN
DECLARE `sp_encrypted_password` VARCHAR(32);
SET `sp_encrypted_password` = MD5(`sp_password`);
INSERT INTO `user`( `user_email`, `user_password`, `user_role_id`) VALUES ( `sp_email`, `sp_encrypted_password`, `sp_role`);
   END$$

DELIMITER ;



Código (sql) [Seleccionar]

CALL `sp_user_insert`('0roch1@hakkesshu', 'Pas$w0rD', 1);


Código (sql) [Seleccionar]

SELECT * FROM `user`;


Saludos