问题描述
https://www.db-fiddle.com/f/9by6GKNcQfNE2NTvLywtxR/2
-模式sql
CREATE TABLE test (
u char(100),p char(100)
);
INSERT INTO test (u,p) VALUES ('admin','adminp');
INSERT INTO test (u,p) VALUES ('michelle','michellep');
SELECT * FROM test where p=p=1
解决方法
在求值p=p=1
时,该表达式首先求值p=p
,这是微不足道的(编辑:至少对于p
的任何非NULL值)。也就是说,p
列在给定行上始终等于其自身。
在MySQL中(不同于标准SQL),布尔值 true 实际上是整数1。因此p=p
的计算结果是整数1。
然后将1与表达式中的1进行比较,这种比较将始终为真。
目前尚不清楚您打算p=p=1
测试什么。
mysql从左写到
p=p
始终为真
true = 1
并且mysql将true设置为1,将false设置为0
所以表达式始终为真
正如Akina指出的那样,p is NULL
同情心将返回假,如https://www.db-fiddle.com/f/9by6GKNcQfNE2NTvLywtxR/3
, WHERE
子句中的条件:
p = p = 1
等效于:
(p = p) = 1
并且因为没有空值,所以表达式:
p = p
始终为true
,对于MySql而言,它等于1
。
因此整个表达式等同于:
1 = 1
始终为true
。