2017-03-27 369 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 

那么你将不会返回额外的数据。