1、翻了下msyql问文档,貌似没看到对select中 and or的描述;
结论:
当字符串全部为字母,则0
当字符串第一个字符为数字,则为1
当字符串第一个字符为+-.,后面紧跟为数字时,为1当空值null 与数字 ,则为0;与0 则为null
::null介于1与0 之间
2、SQL语句的短路 and 短路or:
mysql中 and即&& or即 || 本身为短路与或;
SELECT 'xxxx' AND ( SELECT CASE WHEN 11 = 11 THEN SLEEP(1) ELSE 1 END )
SELECT '111' AND ( SELECT CASE WHEN 11 = 11 THEN SLEEP(1) ELSE 1 END )
3、nullif(a,b):
当a=b,则返回null,当a!=b 则返回a;
类似于
CASE WHEN a= b THEN NULL ELSE a END
4、ifnull(a,b):
假如b不为NULL,则 IFNULL() 的返回值为a; 否则其返回值为 b。IFNULL()的返回值是数字或是字符串,具体情况取决于其所使用的语境
在实战中,结合ifnull/nullif,构造比较简单的语句:
title_id=123″ OR IFNULL((nullif(length(database()),12)),SLEEP(1)) and “1”=”1
5、更多可参考https://www.t00ls.net/viewthread.php?tid=55278
6、MySQL文档地址:
https://dev.mysql.com/doc/refman/8.0/en/control-flow-functions.html