很久没有研究一个“深层次”的问题了。mysql
首先来看咱们为何要讨论这个问题~sql
首先这是一个正常的数据库查询,咱们能够看到在ruizhi数据库里的chouka表内,全部数据如图。数据库
如今,咱们运行查询:框架
select * from chouka where "qq=915620310";ui
select * from chouka where "1qq=915620310";spa
咱们来看看结果:3d
能够看到,第一句结果为空,第二句结果为全查。两句的差异在于,第二句的“”内,在第一句“”内的内容前加了一个1.blog
为何会出现这种状况呢?开发
mysql在把字符串强转成数字有三种方式:字符串
方法一:SELECT CAST('123' AS SIGNED);
方法二:SELECT CONVERT('123',SIGNED);
方法三:SELECT '123'+0;
where后的条件,最终是以数字的形式进行比较,换言之where后的条件,最终生成的结果都是数字,因此要发生字符串向数字的转换,转换规则如上。
换句话说,若是字符串没法直接转换成数字,则字符串会进行前置数字正则匹配,成为最终的结果。咱们来看看演示:
好了,如今你应该明白若是where后跟的是字符串,那么断定条件究竟会发生如何的变化。
咱们为何要探究这个问题呢?这是由于,在一些开发框架中,为了防止参数恶意注入,会对全部注入的参数“转化成字符串”,这时候,应该尤为注意这个规则,以免出现全查/空集的状况。