为什么在mysql select * from accout where name = "小王" 数据可以查询出来而在后面加上and sleep(3)后数据就查询为空

为什么在mysql select * from accout where name = "小王" 数据可以查询出来而在后面加上and sleep(3)后数据就查询为空

img

img

sleep函数是睡眠指定秒数,一般执行成功返回0,执行失败返回1,
select * from accout where name = "小王" and sleep(3) 相当于 select * from accout where name = "小王" and 0;查询结果不成立,所以返回没数据
可以改成 select * from accout where name = "小王" and sleep(3)=0,或者把sleep放在查询结果中 select sleep(3), a.* from accout a where name = "小王"

SELECT语句中加入SLEEP(3)意味着数据库将等待3秒钟的时间,可能会超出数据库的等待响应时间,导致数据库放弃查询并返回空结果。这种情况通常发生在某些安全设置中,为了防止SQL注入攻击,数据库将该语句视为恶意操作并停止处理。

如果你想要避免上述情况,请使用更安全的SQL语句。举个例子,你可以使用预处理语句或参数化查询,这样数据库将认为它是有效查询,并且不会被误认为是恶意操作。
例如,使用预处理语句:

SET @name = '小王';
PREPARE stmt FROM 'SELECT * FROM account WHERE name = ?';
EXECUTE stmt USING @name;
DEALLOCATE PREPARE stmt;

或者使用参数化查询:

SELECT * FROM account WHERE name = '小王';

函数解释:MySQL SLEEP() 函数将当前查询暂停(睡眠)指定的秒数。用法不是这样使用的,可以加在查询列上,会使查询结果暂停后再次查询,加到过滤列上,因为and不满足条件,故无法查出。

sleep是个函数,它没有返回值,任何东西和它做and结果都返回false