Mysql,其中1=0
在simply sql book中,有一部分代码提到如果我使用Mysql,其中1=0,mysql,select,Mysql,Select,在simply sql book中,有一部分代码提到如果我使用where 1=0,我可以安全地添加一个或多个条件,如: WHERE 1=0 OR name LIKE '%Toledo%' OR billaddr LIKE '%Toledo%' OR shipaddr LIKE '%Toledo%' 我不明白为什么当我使用where 1=0时,我可以安全地添加OR语句 我可以用下面这样的东西吗 WHERE 1=1 OR name LIKE '%Toledo%'
where 1=0
,我可以安全地添加一个或多个条件,如:
WHERE
1=0
OR name LIKE '%Toledo%'
OR billaddr LIKE '%Toledo%'
OR shipaddr LIKE '%Toledo%'
我不明白为什么当我使用where 1=0
时,我可以安全地添加OR语句
我可以用下面这样的东西吗
WHERE
1=1
OR name LIKE '%Toledo%'
OR billaddr LIKE '%Toledo%'
OR shipaddr LIKE '%Toledo%'
我知道其中1=1
是添加And语句的快捷方式。我理解这一点,因为
其中1=1
将返回true。我可以将其用于或语句吗?
Istill未获取零件,其中1=0
任何解释都很好。这取决于您正在处理的布尔运算类型。如果要添加数量可变的和
语句,则使用计算结果总是为true的语句,例如1=1
。另一方面,如果要对或语句执行相同的操作,则应使用计算结果为false的语句,例如1=0
假设您有一个布尔变量x
,其真值不确定(可能为真,也可能为假。您不知道)。现在,如果您找到x和false的值,则无论x
的值是什么,您都会得到false
另一方面,如果您查看x或true
,您将得到true
。同样,这与x
的真值无关
在语句中,您希望硬编码的值对查询的逻辑没有影响。由于false或a或b或c
在逻辑上等同于a或b或c
,因此硬编码语句无效。在另一种情况下,true以及a和b和c
相当于a和b和c
一旦结果解析为确定的TRUE或FALSE,MySQL就会停止计算其余行
正确还是错误?或者?
将始终为真,因此MySQL将只查看第一项,而不测试任何其他内容。
FALSE和?而且?
将始终为FALSE,因此MySQL也不会查看其他测试
这有一个(意外的)副作用,即MySQL永远不会使用类似的方法查看您的表,而是返回以下查询中的所有行:
SELECT * FROM atable
WHERE
1=1 /* <--- this makes the whole OR set always true*/
OR name LIKE '%Toledo%' /* therefore the like tests are never done */
OR billaddr LIKE '%Toledo%' /*and all rows are returned */
OR shipaddr LIKE '%Toledo%'
这与和
我可以用下面这样的东西吗
WHERE
1=1
OR name LIKE '%Toledo%'
OR billaddr LIKE '%Toledo%'
OR shipaddr LIKE '%Toledo%'
这将返回每一行(因为它总是真的),所以不…注意,为了可读性,您也可以使用where false或where true和。
WHERE
1=1
OR name LIKE '%Toledo%'
OR billaddr LIKE '%Toledo%'
OR shipaddr LIKE '%Toledo%'