一個項目中在寫ibatis中的sql語句時,where user_id in (#user_id_list# ), 運行時總是不行,后來上網(wǎng)查了查,才知道這里不該用#,而應(yīng)該用$,隨即查了下#與$的區(qū)別.
總結(jié)如下:
1.#是把傳入的數(shù)據(jù)當作字符串,如#user_id_list#傳入的是1,2,則sql語句生成是這樣,in ('1,2') ,當然不可以
2.$傳入的數(shù)據(jù)直接生成在sql里,如#user_id_list#傳入的是1,2,則sql語句生成是這樣,in(1,2) 這就對了.
3.#方式能夠很大程度防止sql注入.
4.$方式無法方式sql注入.
5.$方式一般用于傳入數(shù)據(jù)庫對象.例如傳入表名.
6.一般能用#的就別用$.
直觀的說
#str# 出來的效果是 'str'
$str$ 出來的效果是 str
另外 ##只能用在特定的幾個地方 $$可以用在任何地方 比如 order by $str$
你甚至可以直接寫 $str$ 把 order by 這個字串放在str里傳進來
今天花了N久,才把這個問題搞出來,郁悶下,不過出來了也挺開心的,終于搞定啦,嘿嘿~!~