点击“关注”了解更多信息
以mybati框架为例,直接使用#注解的话,范围查询的结果会与理想的结果不一致:
关于范围查询in
在SQL语言中,in主要用于范围精准查询。例如下⾯的SQL语句,主要是查询年龄为18,28,38的⼈:select * from student where age in(18,28,38);
既然跟数据库交互有关,⾃然⽽然就会想到SQL注入的防护问题,第⼀时间想到的方案就是预编译了。但是采⽤预编译执⾏SQL语句传⼊的参数不能作为SQL语句的⼀部分。那么范围查询in的场景更多的可能会直接使⽤拼接的⽅式进⾏交互。那么很可能存在SQL注⼊风险。以mybati框架为例,直接使用#注解的话,范围查询的结果会与理想的结果不一致:
<select id="searchUser" parameterType=“String” resultType=“com.tk.codeAudit.sqlinject.mybatis.User">
select * from user where id in (#{_parameter})
select>
本来查询id范围在1和2的用户,只返回了一条记录: