MySQL order by之後用佔位符導致排序失效

  • 結論
    使用PreparedStatement執行SQL時,如果order by之後的排序字段使用佔位符,通過setString設置值的話,會導致排序失效

  • 原因
    PreparedStatement用佔位符防止SQL注入的原理是,在爲佔位符設置值時,會將值轉爲字符串,然後轉義,再將值放入反引號中,放置在佔位符的位置上;源碼見

    因此,當排序字段使用佔位符後,原來的排序語句 order by gmt_created(假設排序字段是gmt_created),在實際執行時變成了 order by `gmt_created`,根據字段排序變成了根據字符串常量`gmt_created`排序,導致排序失效

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章