zoukankan      html  css  js  c++  java
  • IBatis.Net使用总结(一)-- IBatis解决SQL注入(#与$的区别)

    IBatis解决SQL注入(#与$的区别)

    在IBatis中,我们使用SqlMap进行Sql查询时,需要引用参数,在参数引用中可以使用两种占位符#和$.这两种占位符有什么区别呢?

    (1):#***#,进行预编译,采用参数化命令方式进行处理,有效防止sql注入,可以进行类型匹配。在模糊查询的时候,使用##

      
    (2):$***$, 不进行数据类型匹配,它只是简单的字符拼接。一般使用于非变量参数,例如数据库对象,select * from $tableName$ 对于不同的表执行统一的查询

     1、2中*** 代表属性值,Map中的Key或者model对象中的属性

     #与$都能使用的情况下,最好使用#.

     #Str#   编译成  'Str'

     $Str$  编译成  Str

    例如:

    第一种情形:

        A: select * from Student where sName like '%'+$Name$+'%'

       B:select * from Student where sName like '%'+#Name#+'%'

    A、B两种sql语句中,Name都是用户传入的数据,如果用户输入【wei】,则

    编译之后,执行的Sql语句:

    A:select * from Student where sName like '%'wei'%'   --查询不出我们想要的结果

    B:select * from Student where sName like '%wei%'     --正常执行,返回正确的值。    

    第二种情形:

      C:select  top $limit$ * from Student 

      D:select top #limit# * from Student 

    C、D两条语句如果需要查询前10条记录,则执行语句为:

    C: select  top 10 * from Student    --由于$$只是简单的拼接,所以正常执行,返回正确的结果

    D:select  top '10' *  from Student    ---这个执行显然通不过的。

    感谢您的认真阅读,更多内容请查看:
    出处:http://www.cnblogs.com/weiqinl
    个人主页http://weiqinl.com
    github: weiqinl
    简书:weiqinl
    您的留言讨论是对博主最大的支持!
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    行列式的六条运算法则整理
    李昊大佬的CV模板
    洛谷P2918 [USACO08NOV]买干草(一道完全背包模板题)
    .
    洛谷P2822 组合数问题
    欧拉筛法模板&&P3383 【模板】线性筛素数
    拓展欧几里得算法
    欧几里得算法求最大公约数模板
    P2678 跳石头
    【五一qbxt】test1
  • 原文地址:https://www.cnblogs.com/weiqinl/p/4935911.html
Copyright © 2011-2022 走看看