讨论:一个小坑注意绕行

浏览:1276 发布日期:2020/03/21 分类:ThinkPHP6专区
先上结论:
1、书写的方式要规范
2、书写的参数要仔细
再上结果:
因为自己偷懒,书写参数的时候会尽量能少就少写,
结果发现一个参数书写不规范导致的程序运行错误。
分析:
产生问题的地方
$users = $users->where('id>9');
$users = $users->where('id >9');
上面的两行代码,唯一不同就是参数部分,
一个是id>9,一个是id空格>9,
这里的空格可以在任意位置,会引发截图中的正则匹配结果不同,也就导致进入两个不同的分支,完全没有空格会被匹配为[id>9,null,'']的数据表列名,带空格会被认为id>9的RAW条件。
而在命令行模式下运行SQL语句:
mysql> select * from user where id>9;
可以获得想要的数据,这就导致平时的习惯造成的问题。
截取自框架源码文件WhereQuery.php
} elseif (is_string($field)) {
            if (preg_match('/[,=\<\'\"\(\s]/', $field)) {
                return $this->whereRaw($field, is_array($op) ? $op : [], $logic);
            } elseif (is_string($op) && strtolower($op) == 'exp') {
                $bind = isset($param[2]) && is_array($param[2]) ? $param[2] : [];
                return $this->whereExp($field, $condition, $bind, $logic);
            }
            $where = $this->parseWhereItem($logic, $field, $op, $condition, $param);
结论:书写参数一定要规范、认真,官方提供的各种约束条件和写法也是有道理的,有的看似麻烦却可以减少很多的不必要失误。
最佳答案
评论( 相关
后面还有条评论,点击查看>>