我遇到了选择INTO子句的问题 -
CREATE PROCEDURE `sp_user_signup`(
IN gender int,
IN dob varchar(50),
IN location int,
IN email varchar(100),
IN password varchar(50),
IN verify_uuid varchar(256),
IN fb_user bool
)
BEGIN
DECLARE User_ID INT DEFAULT 0;
DECLARE ENABLED BOOL DEFAULT TRUE;
SELECT user_id INTO User_ID FROM tbl_user_login WHERE email = email;
CALL sp_debug(ENABLED,1,User_ID,(select concat_ws('',"UserID:", User_ID)));
IF User_ID = 0 THEN
<do something>
ELSE
<do something>
END IF
END
我的tbl_user_login包含电子邮件的值 - v.psk@gmail.com。 即使我将电子邮件v.psk@gmail.com传递给SP,它也总是进入IF BLOCK。 调试中User_ID的值为零。
提前致谢。
答案 0 :(得分:1)
这不符合您的期望:
SELECT user_id INTO User_ID FROM tbl_user_login WHERE email = email;
问题在于您认为一个email
是变量而另一个是列。 SQL虽然无法读懂你的想法,所以两者都是专栏。
使用某些内容对变量进行前缀,以便将它们与列区分开来。例如:
CREATE PROCEDURE `sp_user_signup`(
IN v_gender int,
IN v_dob varchar(50),
IN v_location int,
IN v_email varchar(100),
IN v_password varchar(50),
IN v_verify_uuid varchar(256),
IN v_fb_user bool
)
BEGIN
DECLARE v_User_ID INT DEFAULT 0;
DECLARE ENABLED BOOL DEFAULT TRUE;
SELECT user_id INTO v_User_ID FROM tbl_user_login WHERE email = v_email;
CALL sp_debug(ENABLED,1,v_User_ID,(select concat_ws('',"UserID:", v_User_ID)));
IF v_User_ID = 0 THEN
<do something>
ELSE
<do something>
END IF
END