Where子句在传递未知字符串值后检索数据。为什么?

时间:2018-02-26 04:29:14

标签: php mysql phpmyadmin

SELECT * FROM `table_name` WHERE `column_name` = "60dsfdsf"

在phpmyadmin中,如果运行此查询,则会从column_name检索table_name值60。

此处column_name类型为int和primary。

我希望找不到任何价值,但它会检索column_name值60

背后的原因是什么?

1 个答案:

答案 0 :(得分:2)

嗯,这是根据类型转换值的MySQL。如果列的类型为INT,并且传递的值包含具有数字的字符串,则它将从中提取数字。

根据type-conversion-MySql

  

当运算符与不同类型的操作数一起使用时,会发生类型转换以使操作数兼容。某些转换是隐式发生的。例如,MySQL会根据需要自动将数字转换为字符串,反之亦然。

所以在你的情况下,

SELECT * FROM table_name WHERE column_name = "60dsfdsf"

实际上转换为

SELECT * FROM表名WHERE {COLUMN_NAME {1}}

编辑:

如果您的字符串以数字开头,那么MySql将采用该数字。

例如。 = "60"60dsfdsf

但是,如果字符串最初有字母,那么结果将是

例如。对于MySQL,60dsfdsf60

所以要小心,因为每种情况都不会有相同的结果。更好的方法,在传递值之前转换或提取数字,然后将其发送到查询。

希望这有帮助