具有IN条件的Sql - WHERE子句

时间:2015-08-30 06:28:23

标签: mysql sql

我刚尝试了一些关于W3school的SELECT ... IN查询的例子:

http://www.w3schools.com/sql/trysql.asp?filename=trysql_select_in

所以,首先我尝试了一个简单的查询:

SELECT * FROM Customers WHERE 'Paris' IN (City); 

返回城市为巴黎的表格中的所有行。但是,当我尝试这样的事情时:

SELECT * FROM Customers WHERE 'Paris' or 1=1 or 'abc' IN (City); 

它返回表格中的所有内容。我对这里发生的事情感到有点困惑,有人可以向我解释一下这里发生了什么吗?

对我来说,我想当WHERE子句将表达式'1 = 1'计算为true时,它将忽略查询的其余部分并返回表中的所有内容。但是如果我只使用:

,它必须在'1 = 1'表达式之后有另一个OR表达式

SELECT * FROM Customers WHERE'Paris'或1 = 1 IN(City);

会导致错误!它必须在'1 = 1'表达式之后有另一个或表达式。

更新:我正在使用mysql!这是一个sql注入,我试图从表中获取所有数据。

2 个答案:

答案 0 :(得分:2)

WHERE CITY IN ('Paris','Rome','London')

的缩写形式
WHERE ( CITY = 'Paris' OR CITY = 'Rome' OR CITY = 'London' )

在你的例子中

SELECT * FROM Customers 
WHERE ('Paris' or 1) = 1   --<< 1 does = 1 so all rows are returned
   or ('abc' IN (City) )
; 

答案 1 :(得分:0)

您应该使用Y中的WHERE X来选择多个值:

SELECT * FROM Customers WHERE City IN(&#39; Paris&#39;,&#39; abc&#39;)