寂寞部屋
- 关注互联网,关注生活
关注互联网,关注生活
2019年五月
« 4月    
 12345
6789101112
13141516171819
20212223242526
2728293031  
  • 日志总数:553 篇
  • 浏览总量:2,434,973 次
  • 运行天数:618 天
  • 建站时间:2017-9-14
  • 最后更新:2019-4-2

iBATIS中的$和#

由于新的系统网上商城中用到iBATIS,刚才在写代码的时候一直很郁闷,用“##”传参数时,一条SQL是

SQL代码
  1. select * from tbuser where id in (#ids#)  

参数使用的是string类型,值是“1,2,3,4”,然而一直查不到数据。想了N久,也不懂得如何解决。后来在baidu了一下,找到了一些相关资料,终于可以解决了。以下是一点资料整理。

由于使用"#id#"来传值,形成的SQL就是

SQL代码
  1. select * from tbuser where id in ("1,2,3,4")   

所以也就不能查询成功。正确的方式应该是使用"$"来传值,其SQL如下

SQL代码
  1. select * from tbuser where id in ($ids$)  

 

$和#的区别在于, $方式传进的参数值是直接生成到SQL文里面的

而#是作为PrepareStatement的(?)参数传进SQL里面的  

形式上看,$比#方式要灵活。不过,这两种方式是为了应对不同的问题的。

当用#方式传入画面上直接输入的值时能够很大程度上防止SQL注入攻击。

而用$方式传直接输入参数的时候,是无法防止SQL注入攻击的。

$方式主要是用来把数据库对象名当作参数传入。

这是#方式做不到的这种做法不太常见,一般只有在写共同逻辑的时候用

另外,从效率上来讲,也应当避免把能够用#方式传入的参数用$方式传入。

本站原创文章,请勿复制转载
版权声明:除特别注明外,本站所有文章均为原创,未经许可请勿复制、转载
2008-03-29
3,878 views
标签: ,

发表评论

注意: 评论者允许使用'@user空格'的方式将自己的评论通知另外评论者。例如, ABC是本文的评论者之一,则使用'@ABC '(不包括单引号)将会自动将您的评论发送给ABC。使用'@all ',将会将评论发送给之前所有其它评论者。请务必注意user必须和评论者名相匹配(大小写一致)。