带有存储过程的'where子句'中的未知列

时间:2012-01-18 14:38:14

标签: mysql sql stored-procedures prepared-statement

我正在使用带有准备好的陈述的存储过程来查找电子邮件地址字符串中的行。

看起来像这样:

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `get_users_by_email`(IN emailString VARCHAR(100))
BEGIN
    SET @sql = CONCAT('SELECT user_id FROM users WHERE user_email IN  (',emailString,')');
    PREPARE qry FROM @sql;
    EXECUTE qry;
END

然后我使用以下方法调用该程序:

CALL get_users_by_email('me@email.com,you@email.com, etc..');

但是,我收到了这个错误:

Unknown column in 'me@email.com' in 'where clause'

如果我使用它来查找数值,例如:

,则查询有效

CALL get_users_by_email('123,456');

为什么会出现字母数字值错误的想法?从预先准备好的语句和过程中拉出查询时,查询工作正常。

2 个答案:

答案 0 :(得分:2)

您的电子邮件地址周围需要字符串分隔符:

SET @sql = CONCAT('SELECT user_id FROM users WHERE user_email IN  (''',emailString,''')');

答案 1 :(得分:1)

如果您使用的是字符串,则需要使用引号传递:

SET @sql = CONCAT('SELECT user_id FROM users WHERE user_email IN  (''',emailString,''')');

我用额外的引号来逃避。数字有效,因为如果数字没有分隔,则数字不会被解释为对象名称。