首页 新闻 会员 周边 捐助

参数化查询除了防止注入,还解决其它什么问题?

0
[已解决问题] 解决于 2014-04-14 09:59

参数化查询出来防止注入还有其它作用吗?如果我的参数是一个值类型,比如datetime或者int

还做参数化查询那不是没有意义了?

吴瑞祥的主页 吴瑞祥 | 高人七级 | 园豆:29449
提问于:2014-04-13 18:23
< >
分享
最佳答案
1

如果是拼接字符串的形式,那么在数据库中执行,有可能会进行多次解析。

给你看个例子

  1. select * from orderheader where changetime > ‘2010-10-20 00:00:01’  
  2. select * from orderheader where changetime > ‘2010-09-22 00:00:01’ 

以上两句语句,查询优化器认为是不同的SQL语句,需要解析两次。如果采用绑定变量

  1. select * from orderheader where changetime > @chgtime 

@chgtime变量可以传入任何值,这样大量的类似查询可以重用该执行计划了,这可以大大降低数据库解析SQL语句的负担。一次解析,多次重用,是提高数据库效率的原则。

奖励园豆:5
sam.c | 初学一级 |园豆:148 | 2014-04-14 09:10

有道理.

吴瑞祥 | 园豆:29449 (高人七级) | 2014-04-14 09:33
其他回答(2)
0

主要是防注入 还有就是特殊字符转换问题 例如 单引号

因为如果每个位置参数都要进行特殊处理

在全局上 有隐患还划不来 

所以还不如全局处理

小眼睛老鼠 | 园豆:2731 (老鸟四级) | 2014-04-13 23:08
0

参数化查询还有利于数据库查询计划缓存的重用

请参考:SQL注入攻防入门详解

滴答的雨 | 园豆:3660 (老鸟四级) | 2014-04-14 09:07
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册