一個(gè)項(xiàng)目中在寫ibatis中的sql語句時(shí),where user_id in (#user_id_list# ), 運(yùn)行時(shí)總是不行,后來上網(wǎng)查了查,才知道這里不該用#,而應(yīng)該用$,隨即查了下#與$的區(qū)別.
總結(jié)如下:
1.#是把傳入的數(shù)據(jù)當(dāng)作字符串,如#user_id_list#傳入的是1,2,則sql語句生成是這樣,in ('1,2') ,當(dāng)然不可以
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
另外 ##只能用在特定的幾個(gè)地方 $$可以用在任何地方 比如 order by $str$
你甚至可以直接寫 $str$ 把 order by 這個(gè)字串放在str里傳進(jìn)來
今天花了N久,才把這個(gè)問題搞出來,郁悶下,不過出來了也挺開心的,終于搞定啦,嘿嘿~!~