sql中#和$的区别
三:sql中 # 和 $ 的区别: #可以防⽌sql注⼊
#是占位符,在DBMS才进⾏替换,在预编译时使⽤?占位,能防⽌sql注⼊;
delete from user where name = ?;
⽽传⼊的参数将会经过PreparedStatement⽅法的强制类型检查和安全检查等处理,最后作为⼀个合法的字符串传⼊。
在#{}预处理之后可以预防SQL注⼊传⼊username 为 xiaoming‘or’1=1,使⽤#{},经过sql动态解析和预编译,会把单引号转义为 ’ 那么sql最终解析为: delete from user where name = "xiaoming\' or \'1=1 ";
$是拼接符,在动态sql解析阶段将会进⾏变量替换,有可能会引发sql注⼊
sql中delete用法${}这种⽅式只是简单的字符串替换,在动态SQL解析阶段将会进⾏变量替换,假如传递的参数为xiaoming,
最终处理结果如下:
delete from user where name = 'xiaoming' ;
预编译之前就已经被替换,有被注⼊的风险。如果传⼊的为那么使⽤{} 处理后直接替换字符串的sql就解析为:
delete from user where name = 'a' or '1=1' ;
这样整个表的数据就会被⼲掉引发⽣产事故
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论