我希望有人能够提供帮助。我已经创建了我的第一个存储过程(没有任何幻想)但是我遇到了一个问题。
我想给它一个字符串输入,例如1,2,3,4,5然后它做一个简单的SELECT * FROM [TABLE] WHERE EAN IN (VAR);
所以存储过程看起来像这样:
-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$
CREATE PROCEDURE `moments`.`new_procedure`(IN var1 VARCHAR(255))
BEGIN
SELECT * FROM moments.PRODUCT WHERE EAN IN (var1);
END
我正试图像这样执行它:
作品
call moments.new_procedure('5045318357397')
不起作用
call moments.new_procedure('5045318357397,5045318357427');
这会执行但不会带回任何结果。它是否将第二个语句分类为字符串,因此它执行此操作:
select * from moments.PRODUCT WHERE EAN IN ('5045318357397,5045318357427')
而不是这个:
select * from moments.PRODUCT WHERE EAN IN ('5045318357397','5045318357427')
如何在执行查询中格式化输入以使其以逗号分隔的字符串作为输入?
答案 0 :(得分:15)
您可以使用:
SELECT * FROM moments.PRODUCT
WHERE FIND_IN_SET(EAN, var1)
这应该可以正常,假设它实际上是以逗号分隔的。在这种情况下,任何其他分隔都不起作用。
答案 1 :(得分:2)
假设您传递的字符串以某种方式验证并且不包含恶意sql,您可以使用预准备语句:
PREPARE stmt1 FROM CONCAT('select * from moments.PRODUCT WHERE EAN IN (',var1,')');
EXECUTE stmt1;