select * from Employees where Name = 'John' or ''=''
此语句检索表中的所有员工。
我无法理解''=''
是如何被解释的?你能解释一下吗?
答案 0 :(得分:7)
''=''
始终为true
,因为它正在比较两个空字符串
所以基本上''=''
是Tautology
而且你使用OR
条件,因此你的整个条件总是true
。您的WHERE
也可以写成
where Name = 'John' or 1 = 1
您的查询可能只是select * from Employees
,因为WHERE
条件无效。
答案 1 :(得分:1)
这是一个非常毫无意义的where
条款,因为它正在搜索名称:
where Name = 'John'
但它也在使用一个总是返回true的表达式进行搜索:
or '' = ''
所以无论如何都会返回所有数据。
除非在某处动态生成此where
子句且名称过滤器是可选的,否则没有理由包含第二部分。如果没有过滤名称,那么包含始终为真的部分将防止出错。即使如此,我也会质疑它的使用,因为它会返回额外的数据。
如果它是生成的where
子句并且它是必需的,那么它可能更符合逻辑:
or 1=2
然后你不会返回额外的数据。