where 1=1有什么用?在SQL語(yǔ)言中,寫(xiě)這么一句話就跟沒(méi)寫(xiě)一樣。
select * from table1 where 1=1與select * from table1完全沒(méi)有區(qū)別,甚至還有其他許多寫(xiě)法,1<>2,'a'='a','a'<>'b',其目的就只有一個(gè),where的條件為永真,得到的結(jié)果就是未加約束條件的。 在SQL注入時(shí)會(huì)用到這個(gè),例如select * from table1 where name='lala'給強(qiáng)行加上select * from table1 where name='lala' or 1=1這就又變成了無(wú)約束的查詢了。 最近發(fā)現(xiàn)的妙用在于,在不定數(shù)量查詢條件情況下,1=1可以很方便的規(guī)范語(yǔ)句。例如一個(gè)查詢可能有name,age,height,weight約束,也可能沒(méi)有,那該如何處理呢? String sql=select * from table1 where 1=1 為什么要寫(xiě)多余的1=1?馬上就知道了。 if(!name.equals("")){ 如果不寫(xiě)1=1呢,那么在每一個(gè)不為空的查詢條件面前,都必須判斷有沒(méi)有where字句,否則要在第一個(gè)出現(xiàn)的地方加where where 1=1的寫(xiě)法是為了檢化程序中對(duì)條件的檢測(cè) 用上 where 1=1 之后,就不存在這樣的問(wèn)題, 條件是 and 就直接and ,是or就直接接 or ----------------------------------count(1) 與 count(*) |
|
來(lái)自: 悟靜 > 《.net和asp.net》