我遇到了一个奇怪的问题..
我得到了一个包含以下字段的表:
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'
最佳答案
那是因为 mySQL 自动转换用于 int 列的字符串值,切断所有非整数内容。
在此过程中,10ddd
被截断为 10
。
参见 11.2. Type Conversion in Expression Evaluation
我认为使用更严格的 server modes 之一可以关闭,但我在文档中看不到任何内容。如果做不到这一点,我不知道有什么简单的解决方法!
根据值的来源,您可以在执行查询之前检查该值,例如如果在 PHP 中,则使用 is_int()
;如果值不是整数则退出。
关于mysql - 为什么 "10ddd"在我的 SQL 查询中等于 "10"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5787077/