【发布时间】:2016-07-13 17:19:00
【问题描述】:
我正在尝试创建一个存储过程,如果表中已经存在用户名或电子邮件,它将通知我。 这是我的表的结构
CREATE TABLE IF NOT EXISTS `user` (
`user_id` smallint(5) unsigned NOT NULL,
`username` varchar(40) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`email` varchar(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
`password` varchar(128) NOT NULL,
`active` tinyint(4) NOT NULL DEFAULT '1',
`date_joined` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`user_category_id` tinyint(3) unsigned NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;
这是存储过程的代码
DELIMITER $$
CREATE PROCEDURE `sp_create_account`( username_param VARCHAR(40), email_param VARCHAR(60), pass VARCHAR(30), category_id TINYINT )
BEGIN
DECLARE salt VARCHAR(60);
DECLARE username_var VARCHAR(40);
DECLARE email_var VARCHAR(60);
SELECT username_var INTO username_var FROM user WHERE username = username_param;
SELECT email_var INTO email_var FROM user WHERE email = email_param;
IF username_var = username_param THEN
SELECT 'username' AS message;
ELSEIF email_var = email_param THEN
SELECT 'email' AS message;
ELSE
SET salt = '@4$^7EC%?';
SET salt = CONCAT( username_param, salt );
INSERT INTO user VALUES
( DEFAULT, username_param, email_param, AES_ENCRYPT( pass, salt ), DEFAULT, DEFAULT, category_id );
SELECT 'created' AS message;
END IF;
END$$
DELIMITER ;
两个问题: 问题 1: 插入不存在用户名或电子邮件的唯一条目时一切正常,但是当用户名或电子邮件确实存在时,我在下面的屏幕截图中收到这些错误,但我希望存储过程返回一个简单的选择,指示问题出在哪里可能是或表示成功,因为它返回“已创建”
问题 2 如果它是一个唯一条目并且它被插入到表中,则该特定行中的密码列单元格将被插入一个空字符串。
以上所有可能是什么原因?谢谢你。
【问题讨论】: