Unknown column ‘暖‘ in ‘where clause‘

        今天又是记录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}
        但是大多数情况下,还是使用#{}的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦梦~~

你的鼓励是对我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值