为什么这条SQL可以正常查询?

SQL语句:

SELECT * FROM student WHERE height="180 OR 1=1";

查询结果:

按我理解,应该返回null才对,因为加了双引号,180 OR 1=1是一个整体,如果是系统忽略了双引号,应该返回全部结果,但这里却返回了height=180的结果,不知道为什么。mysql有这么智能吗?

阅读 2k
3 个回答

从道理来看,应该不是Mysql智能,你这个height字段应该是一个int类型,那么你查询的时候,height="180 OR 1=1"就会强制转换成int类型,那么这里根据转换规则得到的结果就是height=180,至于具体的转换规则,要看mysql官方文档,我就懒得去找了。

这是因为mysql默认没有开启严格的类型检查。

可以通过sqlmode修改。

height应该是int类型,那么你传入其他内容,他会强转成int,
180 OR 1=1 强转int的结果就是 180

推荐问题