前幾天逛知乎時,看到了這麼一個問題,個人覺得是一個問題,回答者很多,大家是各抒己見,貼出部分回答給大家看看:估計很多接觸SQL夥伴們會有同樣疑問吧,精選幾個回答,分享夥伴們品讀下:程序查詢界面,是通過用户選擇查詢條件,拼接SQL,呈現結果,如果用户選擇任何查詢條件,顯示所有。
平時覺得啥,但問題複雜度一上來,一根稻草能壓死一隻駱駝!!! SQL 語句中,如果 WHERE 條件後面寫上 1=1 意味着該語句返回整張表中所有記錄。


很多時候,我們寫SQL後,需要變換查詢條件進行數據查詢,例如有多個and情況下:—— 如果要後面幾個and,只需要and前增加註釋符號;—— 但如果要where後接着條件,增加註釋是不行,還需要挨着and刪掉。
這樣操作過於,不如where後面1 = 1,後面條件可以隨註釋了。
寫了1=1,後面條件是格式了,排查問題直接註釋掉條件好了;如果沒加,排查問題,where後面條件刪and了。
平時覺得啥,但問題複雜度一上來,一根稻草能壓死一隻駱駝!!! SQL 語句中,如果 WHERE 條件後面寫上 1=1 意味着該語句返回整張表中所有記錄。
這是因為 1=1 是一個條件,所以不論其他條件是什麼,會返回整張表。
這種做法動態查詢中,當用户並需要輸入查詢條件時,可以通過這種方式返回整張表所有數據。
如果應用程序構建 SQL 查詢時使用了 1=1 條件,那麼攻擊者可能會利用這個條件來插入非法 SQL 代碼。
這種事我們可千萬不能幹,不能讓別人有機可乘,這裏只是表述where 1=1作用之一。


延伸閱讀…
是,上面查詢結果是沒有區別,但是這並不是我們要添加它目的。
我們知道1=1表示true,即,SQL注入時配合or運算符會得到意向不到結果。
例如,我們要刪除客户名稱“張三”記錄,我們可以這樣寫:本來只要刪除張三記錄,結果因為添加了or 1=1永真條件,會導致整張表裏記錄刪。
這種事我們可千萬不能幹,不能讓別人有機可乘,這裏只是表述where 1=1作用之一。
延伸閱讀…
我們寫代碼過程中,保證語法規範時候,會使用到where 1=1。
如果我們寫1=1話,當condition 1,代碼拼接後執行SQL代碼如下:,這裏會出現一個SQL 語法錯誤:and前後有條件。
有人説我直接where寫if語句裏面,我寫where 1=1。
當condition 1,condition 2假時,上面執行SQL代碼為:這個確實沒有語法錯誤,但是當condition 1和condition 2為真呢?那麼SQL語句變成了這樣:這段代碼應該是程序(例如Java)中生成,where條件中 1=1 後條件是通過 if 塊動態變化。
例如:where後面總要有語句,加上了1=1後可以保證語法會出錯! 因為table中沒稱為1字段,所以該SQL等效於select * from table,