浅谈mybatis中的#和$的区别 以及防止sql注入的方法
1.#将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。
2.$将传入的数据直接显示生成在sql中
3. #方式能够很大程度防止sql注入,$方式无法防止Sql注入,一般能用#的就别用$.
mybatis中#和$的区别
使用#传入参数是,sql语句解析是会加上"",比如 select * from table where name = #{name} ,传入的name为小李,那么最后打印出来的就是
select * from table where name = ‘小李’,就是会当成字符串来解析,这样相比于$的好处是比较明显对的吧,#{}传参能防止sql注入,如果你传入的参数为 单引号',那么如果使用${},这种方式 那么是会报错的,
另外一种场景是,如果你要做动态的排序,比如 order by column,这个时候务必要用${},因为如果你使用了#{},那么打印出来的将会是
select * from table order by 'name' ,这样是没用,
目前来看,能用#就不要用$,
如果你学过jdbc编程,就知道java提供了2种statement,一种是拼写式sql语句的statement,这种方式对应你说的$,并且可以轻松的注入攻击;另一种是preparestatement,这种是预编译的statement,因为预编译,执行效率要更高,并且由于其拼写sql只能用?代替(即字符不需要带“ ' ”单引号,)它会自动的帮你根据数据类型加上单引号或不加,所以,使用此方式拼写sql语句不容易被注入攻击(或者根本不会),这就是对于你说的#。
------最后,希望采纳!毕竟我们纯手打!
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!