【发布时间】:2014-03-20 23:39:17
【问题描述】:
我有一个带有以下签名的存储过程:
CREATE DEFINER=`prod`@`%` PROCEDURE `User_Create`(IN login VARCHAR(45), IN pwd VARCHAR(45), IN fname VARCHAR(45), IN lname VARCHAR(45), IN email VARCHAR(45), IN group_name VARCHAR(45))
BEGIN
INSERT INTO `Users` (`login`, `first_name`, `last_name`, `email`, `create_time`)
SELECT login, fname, lname, email, NOW();
CALL User_UpdatePassword(login, pwd);
INSERT INTO UserGroupsUsers (`group_id`, `user_id`)
SELECT ug.id, u.id
FROM UserGroups ug, Users u
WHERE ug.`name` = group_name AND u.`login` = login;
END
还有一个是这样的:
CREATE DEFINER=`prod`@`%` PROCEDURE `User_UpdatePassword`(IN login VARCHAR(45), IN newpassword VARCHAR(45))
BEGIN
-- Note that in mysql 5.5.32 SHA2 returns hex so we need to use unhex before calling BASE64_ENCODE
UPDATE Users u,
(
SELECT CONVERT(BASE64_ENCODE(unhex(SHA2(CONVERT(CONCAT(newpassword, `salt`) USING UTF8), 512))) USING utf8) AS `newpassword`, CONVERT(`salt` using UTF8) AS `newsalt`, length(salt) as saltlength
FROM (SELECT BASE64_ENCODE(substring(CONCAT(md5(rand()),md5(rand())), 1, 48)) AS `salt`) t1
) pwd
SET u.`password` = pwd.`newpassword`, u.`salt` = pwd.`newsalt`
WHERE u.`login` = login;
END
我似乎遇到的问题是调用:
SET @login = 'newlogin' $$
SET @fname = 'Ben' $$
SET @lname = 'Bobbers' $$
SET @email = 'ben@bobbers.com' $$
SET @pwd = 'P@ssword' $$
SET @grpname = 'GrpName' $$
CALL User_Create(@newuser_login, @pwd, @first_name, @last_name, @email, @grpname)
$$
正在创建用户并将其正确放入组中,但由于某种原因,User_UpdatePassword 似乎没有以正确的参数传递。我知道 User_UpdatePassword 可以工作,因为如果我再打电话 调用 User_UpdatePassword('newlogin', 'P@ssword') $$
调用 User_Create 后,它工作正常。不知何故,当从另一个存储过程内部调用 User_UpdatePassword 时,pwd 变量似乎没有正确设置。我错过了什么吗?
【问题讨论】:
标签: mysql stored-procedures parameters