在项目中用的是 EF、MySQL,在查询中用到某一个字段的值在某几个中。一开始想到的是 in。
但是,这个字段是 int 类型的,传入的参数需要用“,”分隔。这样传入的就是字符型的。
这样的结果是:本来是 in (1,2,3),这样传参变成 in (‘1,2,3’)和预期的不一样。
为了防止SQL语句的注入,没有使用拼接语句。找了半天发现 find_in_set 这个函数可以达到效果。
来举结果例子:
select * from table_name t where find_in_set(t.field1,'1,2,3,4');
select * from `test` t where find_in_set('daodao',t.field1);
这两个都可以。第一个参数是要查询的目标,第二个参数是查询的源。
有一点,find_in_set 相对于 in 效率上面要差。