Unknown column ‘暖‘ in ‘where clause‘

本文阅读 2 分钟
首页 代码,Java 正文

        今天又是记录bug的一天。话不多说,直接粘贴bug。         “Unknown column ‘暖’ in ‘where clause’”         梦梦忘记截图了,就复制了bug主要部分,主要是记录一下当时解决的过程。         还是以前的解决思路,先试着用中文理解bug,“暖”这一列在where子句中没有被发现。翻译出来之后就会感到疑惑,“暖”明明是我传入的值,为什么会是column (列)呢,查看了一下sql,才会发现,把#{} 误写成了 $ {} 这时才恍然大悟,${}是把传入的值原封不动的注入进去了,#{}是防止sql注入,传入的值会加双引号,拼接sql。

        今天顺便就简单总结一下#{} 和 ${}区别吧。         1,#{}, MyBatis会产生PreparedStatement语句中,会形成 “?”占位符,对接收的参数自动转换为字符串,即会对传入的参数自动加双引号。                 例如:select * from user where name = #{name};                 参数:name : mengmeng                 执行: select * from user where name = “mengmeng”;         2, ${} ,会把传入的数据直接显示在sql中。也就说对传入的值没有进行加工,不会转化为字符串。                 例如:select from user where name = #{name};                 参数:name : mengmeng                 执行: select from user where name = mengmeng;         所以梦梦错把#{}写成 $ {}才会报上面的bug吧。由此可以看到,#{}安全性相对来说,还是比较高的。但是有些情况下,还是需要 $ {} ,因为sql中需要获取表中的字段名。         比如:select * from user order by ${age}         但是大多数情况下,还是使用#{}的。

本文为互联网自动采集或经作者授权后发布,本文观点不代表立场,若侵权下架请联系我们删帖处理!文章出自:https://blog.csdn.net/qq_46540738/article/details/123194443
-- 展开阅读全文 --
安全面试之XSS(跨站脚本攻击)
« 上一篇 07-24

发表评论

成为第一个评论的人

热门文章

标签TAG

最近回复