MySql 查询 int 类型字段作查询条件时遇到的坑

PHP/Mysql/Nginx Alice 1年前 (2019-05-31) 364次浏览 0个评论

今天在写 api 接口的时候,测试时发现一件有趣的事,接口代码如下,很简单的代码

MySql 查询 int 类型字段作查询条件时遇到的坑

userid 为 0 表示后台管理员添加的数据,userid 大于 0 为前端用户上传的数据,如果 userid 有值,就查该用户上传的数据,如果没有,就查后台添加的默认数据,bell 表有如下几条测试数据

MySql 查询 int 类型字段作查询条件时遇到的坑

测试的时候,不传 userid 和传正确的 userid 时,都能显示正确的数据,如下

MySql 查询 int 类型字段作查询条件时遇到的坑
MySql 查询 int 类型字段作查询条件时遇到的坑

然后接着测试随便传一个 userid,结果出现下面的情况,无论是空,还是英文或汉字,都查询到了数据,

MySql 查询 int 类型字段作查询条件时遇到的坑
MySql 查询 int 类型字段作查询条件时遇到的坑
MySql 查询 int 类型字段作查询条件时遇到的坑

然后我又不信邪的传了个数字,这次却正确了

MySql 查询 int 类型字段作查询条件时遇到的坑

瞬间感到很奇特有木有,一开始我以为是代码出了问题,没有进入 if 条件,然后我就去打印了一下 sql 语句,看输出的是什么,然后将语句在 navicat 工具里执行,结果如下,

MySql 查询 int 类型字段作查询条件时遇到的坑

有数据,很惊奇有木有,于是我又将之前测试的条件一一试了一遍,都能得到第一条数据,惊讶~~~ :eek:

MySql 查询 int 类型字段作查询条件时遇到的坑

一时没想明白怎么回事,难道是设计的 userid 类型有问题,于是去看了下表结构,如下

MySql 查询 int 类型字段作查询条件时遇到的坑

是 int 类型,感觉好像并没有什么不妥啊,没办法了,查不出原因,只好找万能的度娘,找到了几篇文章,有网友也遇到过这种情况,给出了他们的答案,

MySql 查询 int 类型字段作查询条件时遇到的坑
参考链接:
https://blog.csdn.net/qq_20124743/article/details/79287962
https://blog.csdn.net/u011861874/article/details/81235905

原来如此,字符串转 int 直接转为 0 了,于是就查询了 userid=0 的第一条记录,我试着用文章中提到的 concat 方法查询了一次,就查不到数据了。

MySql 查询 int 类型字段作查询条件时遇到的坑

真真是有趣啊,happy~~~ :mrgreen: :mrgreen:


女程序员博客 , 版权所有丨本站采用BY-NC-SA协议进行授权 , 转载请注明MySql 查询 int 类型字段作查询条件时遇到的坑
喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址