我遇到了一个奇怪的问题..
我得到了一个包含以下字段的表:
id smallint(5)
client_id smallint(5)
name varchar(50)
pass varbinary(20)
我得到了以下值的行:
id = 5
client_id = 10
name = 'user'
pass = '123'
但是如果我在client_id之后放入一些字符,它仍会返回行???
此查询不应该返回任何内容......嗯
SELECT id
FROM db.user
WHERE client_id='10ddd' && name='user' && pass='123'
答案 0 :(得分:3)
这是因为mySQL会自动转换用于int列的字符串值,从而切断所有非整数内容。
在此过程中,10ddd
会被截断为10
。
请参阅11.2. Type Conversion in Expression Evaluation
我认为可以使用更严格的server modes来关闭,但我在文档中看不到任何内容。如果做不到这一点,我不知道一个简单的解决方法!
根据值的来源,您可以在执行查询之前检查值,例如:在PHP中使用is_int()
;如果值不是整数,则退出。