我刚尝试了一些关于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注入,我试图从表中获取所有数据。
答案 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;)