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:
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:
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`)
);
En principio lo que debes hacer es analizar la longitud de los campos para una mejor optimización de la base de datos.
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
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 ;
CALL `sp_user_insert`('0roch1@hakkesshu', 'Pas$w0rD', 1);
SELECT * FROM `user`;
Saludos