环境:Mysql5.7
你知道下边sql的执行结果吗?
//注意:这里id是int类型的
SELECT * from company_info WHERE id = '5 OR 1=1'
其实我能猜到,如果执行不出错的话大概能猜到查询结果是啥,结果等价于:
SELECT * from company_info WHERE id = 5
这是为什么呢?
查了一下是Mysql类型的隐式转换的原因。
//字符串中是纯数字
select 1 + '2' => select 3
//字符串中有前导空格,忽略空格
SELECT * from company_info WHERE id = ' 3';
//字符串包含除数字字符以外的任何字符(例如字母、符号或特殊字符),MySQL将尝试转换字符串中尽可能多的数字字符,然后忽略剩余的字符。转换将在遇到第一个非数字字符时停止
SELECT * from company_info WHERE id = '5 OR 1=1';
=》SELECT * from company_info WHERE id = '5';
//如果字符串为空或只包含空格,MySQL通常会将其转换为整数0
SELECT * from company_info WHERE id = ' ';
//时间相关
SELECT DATE_ADD('2024-01-01', INTERVAL '1' DAY); 结果为'2024-01-02'
SELECT CONVERT('2024-01-01', DATETIME);结果为'2024-01-01 00:00:00'
注意字段类型是前提~~~
我还是太菜了呀~~~
赶紧滚去学习咯~~~