MySQL - 选择INTO变量不能按预期工作

时间:2014-07-16 02:36:23

标签: mysql

我遇到了选择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的值为零。

提前致谢。

1 个答案:

答案 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