-
结论
使用PreparedStatement执行SQL时,如果order by之后的排序字段使用占位符,通过setString设置值的话,会导致排序失效 -
原因
PreparedStatement用占位符防止SQL注入的原理是,在为占位符设置值时,会将值转为字符串,然后转义,再将值放入反引号中,放置在占位符的位置上;源码见因此,当排序字段使用占位符后,原来的排序语句 order by gmt_created(假设排序字段是gmt_created),在实际执行时变成了 order by
`gmt_created`
,根据字段排序变成了根据字符串常量`gmt_created`
排序,导致排序失效
MySQL order by之后用占位符导致排序失效
最新推荐文章于 2022-07-18 21:25:00 发布