${}中的变量什么值,就会简单的替代变量,不会做处理
比如delete * from tb_label where name=${labelname}
如果labelname的值是 something' or 'x'='x
替换后的结果就是delete * from tb_label where name='something' and 'x'='x'
这样就不能防止注入攻击
#{}可以防止注入攻击,以为传入的参数会处理一下,自动给传入变量的值加上单引号,并且有的字符会做转译处理
同样上面的情况替换后就会变成下面的语句.
delete * from tb_label where name='something\' and \'x\'=\'x'
这样就会查不到数据,有效防止sql的数据注入攻击。
注意的是,普通的数据类型使用${value}里面的value值时必须的,不能变的,当然不建议使用${}
下面是一个坑,自己以身试坑,红色部分不能使用单引号括起来,这部分还有一种写法就是%${labelname}%,下面的这种是利用"%"'labelname'"%"这种sql的数据库查询语句