程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> 其他數據庫知識 >> MSSQL >> sql where 1=1的優缺陷剖析

sql where 1=1的優缺陷剖析

編輯:MSSQL

sql where 1=1的優缺陷剖析。本站提示廣大學習愛好者:(sql where 1=1的優缺陷剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是sql where 1=1的優缺陷剖析正文


 
1、不消where  1=1  在多前提查詢中的困擾

  舉個例子,假如您做查詢頁面,而且,可查詢的選項有多個,同時,還讓用戶自行選擇並輸出查詢症結詞,那末,按日常平凡的查詢語句的靜態結構,代碼年夜體以下:
 
  string MySqlStr=”select * from table where”;

  if(Age.Text.Lenght>0)
  {
    MySqlStr=MySqlStr+“Age=“+“'Age.Text'“;
  }

  if(Address.Text.Lenght>0)
  {
    MySqlStr=MySqlStr+“and Address=“+“'Address.Text'“;
  }
 
  ①種假定

  假如上述的兩個IF斷定語句,均為True,即用戶都輸出了查詢詞,那末,終究的MySqlStr靜態結構語句變成:
 
  MySqlStr=”select * from table where Age='18'  and Address='雲南省文山州廣南縣小波嗎村'”


 
  可以看得出來,這是一條完全的准確的SQL查詢語句,可以或許准確的被履行,並依據數據庫能否存在記載,前往數據。

  ②種假定

  假如上述的兩個IF斷定語句不成立,那末,終究的MySqlStr靜態結構語句變成:
 
  MySqlStr=”select * from table where“
 
  如今,我們來看一下這條語句,因為where症結詞前面須要應用前提,然則這條語句基本就不存在前提,所以,該語句就是一條毛病的語句,確定不克不及被履行,不只報錯,同時還不會查詢就任何數據。

  上述的兩種假定,代表了實際的運用,解釋,語句的結構存在成績,缺乏以敷衍靈巧多變的查詢前提。

  2、應用 where  1=1  的利益

 

  假設我們將上述的語句改成:
 
  string MySqlStr=”select * from table where  1=1 ”;

 

  if(Age.Text.Lenght>0)
  {
    MySqlStr=MySqlStr+“and Age=“+“'Age.Text'“;
  }

  if(Address.Text.Lenght>0)
  {
    MySqlStr=MySqlStr+“and Address=“+“'Address.Text'“;
  }
 
  如今,也存在兩種假定

  ①種假定

  假如兩個IF都成立,那末,語句變成:
 
  MySqlStr=”select * from table where  1=1 and Age='18'  and Address='雲南省文山州廣南縣小波嗎村'”,很顯著,該語句是一條准確的語句,可以或許准確履行,假如數據庫有記載,確定會被查詢到。
 

 
  ②種假定

  假如兩個IF都不成立,那末,語句變成:

  MySqlStr=”select * from table where 1=1”,如今,我們來看這條語句,因為where 1=1 是為True的語句,是以,該條語句語法准確,可以或許被准確履行,它的感化相當於:

MySqlStr=”select * from table”,即前往表中一切數據。

  言下之意就是:假如用戶在多前提查詢頁面中,不選擇任何字段、不輸出任何干鍵詞,那末,勢必前往表中一切數據;假如用戶在頁面中,選擇了部門字段而且輸出了部門查詢症結詞,那末,就按用戶設置的前提停止查詢。

  說到這裡,不曉得您能否已明確,其實,where 1=1的運用,不是甚麼高等的運用,也不是所謂的智能化的結構,僅僅只是為了知足多前提查詢頁面中不肯定的各類身分而采取的一種結構一條准確能運轉的靜態SQL語句的一種辦法。

where 1=0; 這個前提一直為false,成果不會前往任何數據,只要表構造,可用於疾速建表
 
"SELECT * FROM strName WHERE 1 = 0";

該select語句重要用於讀取表的構造而不斟酌表中的數據,如許節儉了內存,由於可以不消保留成果集。 

create table newtable as select * from oldtable where 1=0;  創立一個新表,而新表的構造與查詢的表的構造是一樣的。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved