2017-03-27 386 views
3
select * from Employees where Name = 'John' or ''='' 

這條語句檢索表中的所有僱員。「=」是什麼意思

我不明白爲什麼''=''解釋?你能解釋一下嗎?

+3

是'「」'等於'「」'',答案是肯定的,而且由於條件是在'或',整個'WHERE'是真的 – Lamak

回答

7

''=''總是true因爲它比較兩個空字符串

所以基本上''=''Tautology,而且您使用的是OR條件,因此整個條件總是true。您WHERE也可以這樣寫

where Name = 'John' or 1 = 1 

您的查詢可以只是select * from EmployeesWHERE條件是沒有任何影響。

+0

我只是搜查硬的東西。這很簡單。我看不到這一點。由於 –

+1

良好的漁獲。萬一有人碰到這個失蹄,「永遠」是不是所有的* *數據庫如此 - 這將在甲骨文不真(唉)。 –

+0

@GordonLinoff,這是奇怪的認識,但在'SQL Server'它總是* * – Rahul

1

這是一個相當沒有意義的where條款,因爲它是尋找一個名稱以:

where Name = 'John' 

但它也有一個永遠返回true的表達式搜索:

or '' = '' 

因此,所有數據將被送回而不管。

不應該有任何理由包括第二部分,除非在運行中產生這個where條款的地方,並在名稱過濾器是可選的。如果名稱不被過濾,包含總是真實的部分將防止錯誤。即使如此,我也會質疑它的使用,因爲它會返回額外的數據。

如果是產生where條款,它是必需的,它可能是更符合邏輯的事情:

or 1=2 

那麼你將不會返回額外的數據。