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
    您的留言讨论是对博主最大的支持!
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    tkinter 进度条
    tkinter 提示符
    python 将字符串转换为字典
    pycurl实例详解
    pyAudio介绍
    Spyer中添加一些常用包的方法
    对机器学习与数据竞赛的一些总结(转)
    教你如何在机器学习竞赛中更胜一筹
    CXF:通过WebService上传文件,包括大文件的处理
    firefox中flash经常崩溃
  • 原文地址:https://www.cnblogs.com/weiqinl/p/4935911.html
Copyright © 2011-2022 走看看