MySQL存储过程查询用户时邮箱匹配条件失效问题求助
问题解决:MySQL存储过程邮箱匹配条件失效的修复
你的问题核心是存储过程的参数没有被正确引用——在IN子句里,你写的是固定字符串"usertodisable@xxx.com",MySQL会把它当成字面量,而不是用传入的参数值替换usertodisable部分。比如调用CALL CheckUserDisable('abc');时,实际是在找邮箱等于"usertodisable@xxx.com"的记录,而非"abc@xxx.com",所以匹配不到目标数据。
修复方案
使用CONCAT()函数将参数与域名动态拼接成完整邮箱地址,修正后的存储过程代码如下:
DELIMITER // CREATE PROCEDURE CheckUserDisable(IN usertodisable VARCHAR(64)) BEGIN SELECT str_id, email1, email2 FROM CI_CONTACTS c WHERE c.str_id = usertodisable OR c.email1 IN ( CONCAT(usertodisable, '@yyy.com'), CONCAT(usertodisable, '@xxx.com'), CONCAT(usertodisable, '@xyz.com') ) OR c.email2 IN ( CONCAT(usertodisable, '@yyyyy.com'), CONCAT(usertodisable, '@xxxxx.com'), CONCAT(usertodisable, '@abc.com') ); END // DELIMITER ;
验证说明
当你再次调用CALL CheckUserDisable('abc');时,CONCAT()会自动将参数'abc'与各域名拼接成abc@yyy.com、abc@xxx.com等完整邮箱,此时就能匹配到表中email1为abc@xxx.com的记录了。
另外需要确认:
- 参数
usertodisable的长度VARCHAR(64)足够容纳传入的用户名,避免拼接时被截断 - 表中
email1、email2字段的类型与拼接后的字符串类型兼容
内容的提问来源于stack exchange,提问作者Ganesh
相关产品推荐
相关产品推荐

