ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

sql语句中#{}和${}的区别

2022-05-13 19:32:07  阅读:152  来源: 互联网

标签:语句 name 区别 sql order user SQL id


进行参数绑定时,我们常使用 #{},因为它可以防止SQL注入

#{} 是预编译处理,它会先将SQL中的#{}替换为?号编译,然后再取值

原始SQL:select * from user where user_name = #{name} 
预编译后:select * from user where user_name = ?
然后调用set方法来赋值‘李四’

将传入的数据都当成一个字符串,会对自动传入的数据加一个双引号。如:order by #user_id#,如果传入的值是111,那么解析成sql时的值为order by “111”, 如果传入的值是id,则解析成的sql为order by “id”。

${} 会先去变量值,再去编译SQL语句

原始SQL:  select * from user where user_name = #{name}
编译后SQL:select * from user where user_name = ‘李四’
这样很容易会遭到恶意SQL的拼接来非法操作数据

${}将传入的数据直接显示生成在sql中。如:order by userid,如果传入的值是111,那么解析成sql时的值为order by user_id, 如果传入的值是id,则解析成的sql为order by id。

#{} 能防止SQL注入的原因:

因为采用预编译机制,预编译完成后,SQL的结构已经固定,
这时候,即使用户输入非法的参数,也不会对SQL语句的整体结构造成影响,从而避免了SQL注入的危险

标签:语句,name,区别,sql,order,user,SQL,id
来源: https://www.cnblogs.com/konghuanqing/p/16267861.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有