我刚刚注意到,如果我执行这样的 MySQL 请求:
SELECT 1 FROM myTable WHERE id = 'asdf'
然后字符串 'asdf' 被转换为 0
。
这意味着我有一个 ID 为 0
的记录,这将匹配。
id
字段的格式为 int(8).
最好的方法是什么:
- 我需要检查(例如通过 PHP)我的值是否仅为数字?
- 有 MySQL 方法可以做到这一点吗?
- 我必须删除 ID 为
0
的记录吗? (不好)
最佳答案
只需编写您的查询,这样它们就不会像使用文本字段那样使用数字字段。
如果 id
是一个数字字段,那么您的 where
子句永远不会有用。是的,如果 MySQL 主动提示它会很好 - 但从根本上说,您不应该编写运行错误查询的代码。
该查询是如何进入您的系统的? 'asdf'
部分是直接用户输入吗?可以改用参数化 SQL 吗?
如果您真的打算查询数字字段,您应该首先确保输入的是数字。在调用代码中将文本转换为整数,不在数据库中。
关于php - mysql自动将字符串转换为整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10983499/