mysql中#{}和${}的区分详解
#{}
会将传入的数据当做一个字符串,会对自动传入的数据加一个双引号
order by #{userId}
这里假设userId = 111,那末解析成sql时会变成 order by "111"
这里如果userId = idStr,那末解析成sql时会变成 order by "idStr"
${}
会将传入的数据直接显示生成在sql中
order by #{userId}
这里假设userId = 111,那末解析成sql时会变成 order by 111
这里如果userId = idStr,那末解析成sql时会变成 order by idStr
#方式能够很大程度避免sql注入;$方式没法避免Sql注入。
$方式一般用于传入数据库对象,例如传入表名。
一般能用#
的就别用$
。MyBatis排序时使用order by 动态参数时需要注意,用$
而不是#
。
默许情况下,使用#{}格式的语法会致使MyBatis创建预处理语句属性并以它为背景设置安全的值(比如?)。这样做很安全,很迅速也是首选做法,有时你只是想直接在SQL语句中插入一个不改变的字符串。比如,像ORDER BY,你可以这样来使用:
ORDER BY ${columnName}; 这里MyBatis不会修改或转义字符串。
例子:
在没有做防Sql注入的时候,我们的Sql语句多是这么写的:
但如果我们对传入的姓名参数做一些更改,比如改成anything’ OR ‘x’='x,那末拼接而成的Sql就变成了
库里面所有的学生信息都被拉了出来,是不是是很可怕。缘由就是传入的anything’ OR ‘x’='x和原本的单引号,正好组成了 ‘anything’ OR ‘x’='x’,而OR后面恒等于1,所以等于对这个库履行了查所有的操作。
防范Sql注入的话,就是要把全部anything’ OR ‘x’='x中的单引号作为参数的一部份,而不是和Sql中的单引号进行拼接
使用了#便可在Mybatis中对参数进行转义
我们看一下发送到数据库真个Sql语句长甚么模样。
到此这篇关于mysql中#{}和${}的区分的文章就介绍到这了,更多相关mysql中#{}和${}的区分内容请搜索之前的文章或继续浏览下面的相关文章希望大家以后多多支持!
文章来源:丸子建站
文章标题:mysql中#{}和${}的区分详解
https://www.wanzijz.com/view/62401.html
相关文章
Related articles
- 1 Mysql 查询患某种疾病的患者语句 2023-07-07 08:03:11
- 2 Redis实现持久化的方式汇总 2023-07-07 08:03:11
- 3 一文弄懂阿里云主机部署Redis并整合Spring Boot 2023-07-07 08:03:10
- 4 SQL Server解析XML数据的方法详解 2023-07-07 08:03:10
- 5 sqoop读取postgresql数据库表格导入到hdfs中的实现 2023-07-07 08:03:10
- 6 SQLServer中使用扩大事件获得Session级别的等待信息及SQLServer 2016中Session级别等待信息的增强 2023-07-07 08:03:10
- 7 SQL Server修改数据的几种语句详解 2023-07-07 08:03:10
- 8 升级和卸载Oracle数据库软件的命令整理 2023-07-07 08:03:10
- 9 MongoDB的安装启动及做成windows服务的教程图解 2023-07-07 08:03:10
- 10 sqlserver中几种典型的等待 2023-07-07 08:03:10