先上结论:
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);结论:书写参数一定要规范、认真,官方提供的各种约束条件和写法也是有道理的,有的看似麻烦却可以减少很多的不必要失误。 最佳答案