Я пытаюсь создать хранимую процедуру, которая уведомит меня, если в таблице уже существует имя пользователя или электронная почта. Вот структура моего столаСохраненная процедура не работает должным образом
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 Если это уникальная запись и она будет вставлена в таблицу, ячейки столбца паролей в этой конкретной строке Вставляется с пустой строкой.
Что может быть причиной всего вышеперечисленного? Спасибо вам.
Спасибо, вы дали мне способ понять это. Я ценю – kellymandem
yw Kelly в любое время – Drew