mysql - Sql - 带有 IN 条件的 WHERE 子句

标签 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 表达式:

从“巴黎”或 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/

相关文章:

php - SphinxQL 按多个字段排序

mysql - 梦工厂 :How to use MySQL aggregate functions in queries?

mysql - 使用子查询将(多个)新行从另一个表插入到一个表中?

mysql - 我如何在我的服务器上生成 mysql 锁定超时错误?

c# - Linq 与 Lambda 等效于 SQL

php - DATEDIFF 和 NOW() mysql_fetch_array 错误

mysql - 尝试使用分区来计算mysql中的不同用户

sql - 从 select 语句和硬编码值插入表

sql - Rails、ActiveRecord 和子查询

java - 如何防止Oracle中的 "bad"日期?