关于Mysql-unknow-column-in-where-clause

写在前边:

已经很久不更新了啊,整个2月份几乎没有遇到什么新鲜事。直到昨天我又犯了一次傻,貌似只有我犯傻的时候才有材料可以跟大家分享…

问题表现:

mysql 报错: unknow column ‘sys’ in where clause

事实上这是个挺常见的错误,我猜你大概会说,这个问题不是已经很明了了么? 你查询了一个不存在的字段! 可是事情的真相真的是这样么?并不是,报这个错误的原因还有一种可能就是你的where条件中字符串的拼接出了问题。

现场还原:

  • 还是先说一下我犯的傻吧

我首先开始排查的问题的时候输出了我的查询SQL,形似


$sql = 'select * from user where id in ('.implode(',',$idArr).')';

$idArr一个元素很多ID数组,里边的内容都是整型的数字,所以我也没想很多,然后抛出了这个mysql错误,我开始检查我的sql语句 。我用记事本打开了我刚刚打印的sql,开始搜索sys这个关键词,但是我没注意到我鼠标的位置,记事本默认向下搜索,提示没搜索到。我后来就随机把这个SQL中的id字符串删掉了一段,删的只剩几个,执行,诶!好了!我开始疑惑,难道整型的id查询在数据长的时候会出问题么?加上在CSDN看到某博客上说是字符串拼接的问题,所以我决定给他做一下处理,顺带加上了这么一段注释。

 //做一下处理换成字符串否则在$IdString过长的时候会引发unknow column 'sys' in where clause 错误

        foreach ($idArr as &$v) {
            $v = '\''.$v.'\'';
        }

加上之后,问题果不其然的解决了,好的,没有问题,完美!然后开开心心的上个线。

引发问题的真实原因

到了晚上快下班的时候,我在开发另一个需求的时候,突然在列表里看到了一个名为sys的用户!真的是瞬间像是被一道闪电击中了!卧槽! (这绝对值两个卧槽,才能表达我当时的内心!),是的就是你想的那样!那个用户id数组里有一个用户的idsys,而这东西是个字符串,但是却没被引号包裹。所以才引发了mysqlunknow column 'sys' in where clause错误。这才是错误的真相!

好了,不说了,趁着还没有同事发现,我要把这个包含了我愚蠢猜测的注释给删掉。

溜了溜了。

posted @ 2019-03-13 16:53  好人二狗  阅读(657)  评论(0编辑  收藏  举报