A-A+

iBATIS中的$和#

2008年03月29日 編程·程序設計 评论 1 条 阅读 3,756 views 次

由于新的系统网上商城中用到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注入攻击的。

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

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

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

标签:

1 条留言  访客:1 条  博主:0 条

  1. QQ空间代码

    不错。。

给我留言

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

Copyright © 寂寞部屋 保留所有权利.   Theme  Ality

用户登录