问题回答
1.java中用%,sql使用#{}。建议。
2.java中用%,sql使用${}。不建议,会sql注入。
3.sql中使用%,sql使用 ${}。不建议,会sql注入。
4.sql中使用%,sql使用 #{}。不允许。会sql错误.
5.sql中使用%,sql使用 #{}。配合concat函数,建议。
简要回答
1.不用${},sql注入有风险
2.用#{},%号在java中或者sql中都可以使用.sql使用%,需要配合concat函数,建议.
1、java中用%,sql使用#{}。建议。
string wildcardname = “%itheima%”;
list<name> names = mapper.selectlike(wildcardname);
<select id=”selectlike”>
select * from foo where bar like #{wildcardname}
</select>
#会预编译为 select * from foo where bar like ?
#假如传递【%itheima%】,sql就是select * from foo where bar like '%itheima%'
#假如传递【%itheima% or 1=1】,sql就是select * from foo where bar like '%itheima% or 1=1',也是没有sql注入的。
2.java中用%,sql使用${}。不建议,会sql注入。需要做额外的处理
string wildcardname = “%itheima% or 1=1”;
list<name> names = mapper.selectlike(wildcardname);
<select id=”selectlike”>
select * from foo where bar like ${wildcardname}
</select>
#假如传递【%itheima% or 1=1】,sql为select * from foo where bar like %itheima% or 1=1;查询了所有
3、sql中使用%,sql使用 ${}。不建议,会sql注入。需要做额外的处理
string wildcardname = “' or '1=1”;
list<name> names = mapper.selectlike(wildcardname);
<select id=”selectlike”>
select * from foo where bar like '%${value}%'
</select>
#假如传递【' or '1=1】,sql就是select * from foo where bar like '%' or '1=1%',能查出所有的数据。
4、sql中使用%,sql使用 #{}。不允许。会sql错误
string wildcardname = “itheima”;
list<name> names = mapper.selectlike(wildcardname);
<select id=”selectlike”>
select * from foo where bar like '%#{value}%'
</select>
#预编译为select * from foo where bar like '%?%'
#假如传递【itheima】,sql就是select * from foo where bar like '%'itheima'%',会出现sql语法错误。
5、sql中使用%,sql使用 #{}。配合concat函数,可以。
string wildcardname = “itheima”;
list<name> names = mapper.selectlike(wildcardname);
<select id=”selectlike”>
select * from foo where bar like concat('%',#{wildcardname,jdbcType=VARCHAR},'%')
</select>
#会预编译为 select * from foo where bar like concat('%',?,'%')
#赋值之后,sql为select * from foo where bar like concat('%','itheima','%')
sql注入的理解