伪墨 2020-09-21 23:27 采纳率: 33.3%
浏览 406
已结题

mybatis order by 不存在的字段却不报错

今天遇到一个很奇怪的问题,mybatis的 # 和 $ 防注入的区别我知道,百度了一下只有说 order by 要使用 $ 这一层,却没有说使用 # 也不报错的问题。

情况是这样的:
order by 后面接动态参数,如果这个动态参数在 table 里不存在,按理来说这个sql执行是会报错的。
我直接在数据库运行sql正是报错的。
但是问题来了,用 #{不存在的字段} 他不会报错,还是会查询出结果,虽然结果没有排序。
但是用 ${不存在的字段} 就会报错。

有大神指点一下这是什么原因吗?

不报错的sql:

select * from table order by #{column};

会报错的sql:

select * from table order by ${column};
  • 写回答

2条回答 默认 最新

  • threenewbee 2020-09-22 00:13
    关注
    ${变量名}不进行数据类型匹配,直接替换。
    所以报错
    #{变量名}可以进行预编译、类型匹配等操作,因此忽略了不存在的排序字段,最后sql没有问题
    
    评论

报告相同问题?