Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: 3n31ch en 4 Julio 2015, 02:49 am



Título: Problemas con procedimiento almacenado en mysql
Publicado por: 3n31ch en 4 Julio 2015, 02:49 am
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
  1. CREATE PROCEDURE `sp_user_insert` (IN `sp_email` VARCHAR(255), IN `sp_password` TEXT, IN `sp_role` INT)
  2. BEGIN
  3. DECLARE `sp_encrypted_password` TEXT;
  4. SET `sp_encrypted_password` = (SELECT MD5(`sp_encrypted_password`));
  5. INSERT INTO `user`( `user_email`, `user_password`, `user_role_id`) VALUES ( `sp_email`, `sp_encrypted_password`, `sp_role`);
  6. END

Por si lo requieren, esta es la tabla:

Código
  1. CREATE TABLE IF NOT EXISTS `user` (
  2.  `user_id` INT(11) NOT NULL AUTO_INCREMENT,
  3.  `user_email` VARCHAR(255) NOT NULL,
  4.  `user_password` text NOT NULL,
  5.  `user_role_id` INT(11) NOT NULL,
  6.  PRIMARY KEY (`user_id`)
  7. );


Título: Re: Problemas con procedimiento almacenado en mysql
Publicado por: 0roch1 en 11 Septiembre 2015, 03:18 am
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
  1. CREATE TABLE IF NOT EXISTS `user` (
  2.  `user_id` INT(6) NOT NULL AUTO_INCREMENT,
  3.  `user_email` VARCHAR(360) NOT NULL,
  4.  `user_password` VARCHAR(32) NOT NULL,
  5.  `user_role_id` INT(2) NOT NULL,
  6.  PRIMARY KEY (`user_id`)
  7. );
  8.  

En tu procedimiento el SELECT está de más al momento de llamar la función MD5
Código
  1. DELIMITER $$
  2.  
  3. CREATE
  4.    PROCEDURE `prueba`.`sp_user_insert`(IN `sp_email` VARCHAR(360), IN `sp_password` VARCHAR(100), IN `sp_role` INT(2) )
  5.  
  6.    BEGIN
  7. DECLARE `sp_encrypted_password` VARCHAR(32);
  8. SET `sp_encrypted_password` = MD5(`sp_password`);
  9. INSERT INTO `user`( `user_email`, `user_password`, `user_role_id`) VALUES ( `sp_email`, `sp_encrypted_password`, `sp_role`);
  10.    END$$
  11.  
  12. DELIMITER ;
  13.  


Código
  1. CALL `sp_user_insert`('0roch1@hakkesshu', 'Pas$w0rD', 1);
  2.  

Código
  1. SELECT * FROM `user`;
  2.  

Saludos