ユーザー名または電子メールがテーブルに既に存在する場合、私に通知するストアドプロシージャを作成しようとしています。ここ は私のテーブルストアドプロシージャが期待通りに機能しない
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 ;
2つの問題のためのコードです: 問題1:でユニークなエントリを挿入するとき すべてが正常に動作しますユーザー名や電子メールは存在しませんが、ユーザー名や電子メールが存在するときは、以下のスクリーンショットでこれらのエラーが表示されますが、ストアドプロシージャは、問題がどこにあるかを示す簡単な選択を返すか、それは一意のエントリであり、それはテーブルに挿入入った場合場合に、それは
通報2 返し「作成」場合、その特定の行のパスワード列のセルは、空の文字列が挿入されます。
上記のすべての原因は何ですか?ありがとうございます。
ありがとう、あなたは私にそれを理解する方法を与えました。私は – kellymandem
yw Kellyいつでも気に入っています – Drew