我刚刚尝试了一些关于 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 表达式:
从“巴黎”或 1=1 IN(城市)的客户中选择 *;
这会导致错误!在“1=1”表达式之后必须有另一个 or 表达式。
更新:我正在使用 mysql!这是一个sql注入(inject),我试图从表中获取所有数据。
最佳答案
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) )
;
关于mysql - Sql - 带有 IN 条件的 WHERE 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32293876/