#相当于对数据 加上 双引号,$相当于直接显示数据
#可以有效的防止SQL注入 会加上“” 之后写进sql中
$不能防止SQL注入 因为会直接写进sql语句中
- 使用
#
时:
用#来传递参数时,sql在解析的时候会加上“”,当成字符段来解析。例如id=“12”。所有很大程度上防止sql注入。 - 使用
$
时:
用$
传入数据直接显示在生成的sql中,如上面的语句id=${12}直接解析为id=12,执行时会报错。
能用#尽量用#。
#{} 用于CRUD(增删改查)语句,${} 则用于模糊查询(记得加%%哦)
sql注入:恶意攻击,通过sql语句在登陆界面等,违法登陆。
补充:
1. 什么是sql注入?
恶意修改(增加)sql语句
实战举例:
用户在输入框中输入的字符串中加入 SQL 语句。
如果在设计不良的程序中忽略了检查,那么这些注入进去的 SQL 语句就会被数据库服务器误认为是正常的 SQL 语句而运行,攻击者就可以执行计划外的命令或访问未被授权的数据。
2. 什么时候必须用$
符号
既然知道了使用#
是为了防止sql注入,那必须使用$
符号就意味着必须sql注入(不让sql注入反而出错),也就是说,${}
替代的是不需要预编译成字符串的数据,如表名、关键字的时候。
举例:
select * from ${tablename} where id = #{id} 此时入参中的 tablename 就不能使用#符号来处理