日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

where 1=1 和 count(1) 與 count(*)

 悟靜 2013-05-03
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("")){
sql=sql+"name='"+name+"'";
}
if(!age.equals("")){
sql=sql+"age'"+age+"'";
}
if(!height.equals("")){
sql=sql+"height='"+height+"'";
}
if(!weight.equals("")){
sql=sql+"weight='"+weight+"'";
}

如果不寫(xiě)1=1呢,那么在每一個(gè)不為空的查詢條件面前,都必須判斷有沒(méi)有where字句,否則要在第一個(gè)出現(xiàn)的地方加where

where 1=1的寫(xiě)法是為了檢化程序中對(duì)條件的檢測(cè)
打個(gè)比方有三個(gè)參數(shù)a, b, c
@sql=select * from tb'
這三個(gè)參數(shù)都可能為空
這時(shí)你要構(gòu)造語(yǔ)句的話,一個(gè)個(gè)檢測(cè)再寫(xiě)語(yǔ)句就麻煩
比如
if @a is not null
@sql=@sql + " where a=' + @a
if @b is not null
這里你怎么寫(xiě)?要不要加where 或直接用 and ?,你這里還要對(duì)@a是否為空進(jìn)行檢測(cè)

用上 where 1=1 之后,就不存在這樣的問(wèn)題, 條件是 and 就直接and ,是or就直接接 or

----------------------------------count(1) 與 count(*)

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買(mǎi)等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類(lèi)似文章 更多