我正在尝试以下MySQL查询:(10.1.19-MariaDB)
- select 1 rlike(if(0=sleep(1), 0x28, 0x28)) → NULL
execution time: 1.0001 seconds
- select 1 rlike(if(0=0, 0x28, 0x28)) → SQL error as expected: 0x28 = "("
为什么MySQL会将第一个表达式计算为NULL?优化是否会导致此类意外行为? 我想首先运行sleep命令,然后比较睡眠函数的结果(如果睡眠函数没有被中断则为零)和0(“0 = 0”→1→true),然后让MySQL生成SQL错误。所以先做“睡觉”,然后做“SQL错误”。 是否有可能通过MySQL睡眠功能实现这一目标? (否则我会使用所谓的“重问题”:http://www.sqlinjection.net/heavy-query/)
(注意:这里没有堆叠查询 - 只有子查询)