乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

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

       悟靜 2013-05-03
      where 1=1有什么用?在SQL語言中,寫這么一句話就跟沒寫一樣。

      select * from table1 where 1=1與select * from table1完全沒有區(qū)別,甚至還有其他許多寫法,1<>2,'a'='a','a'<>'b',其目的就只有一個,where的條件為永真,得到的結(jié)果就是未加約束條件的。

      在SQL注入時會用到這個,例如select * from table1 where name='lala'給強(qiáng)行加上select * from table1 where name='lala' or 1=1這就又變成了無約束的查詢了。

      最近發(fā)現(xiàn)的妙用在于,在不定數(shù)量查詢條件情況下,1=1可以很方便的規(guī)范語句。例如一個查詢可能有name,age,height,weight約束,也可能沒有,那該如何處理呢?

      String sql=select * from table1 where 1=1

      為什么要寫多余的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+"'";
      }

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

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

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

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

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

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多