THINKPHP6模糊查询总是in查询的问题

作者:有用网

当我们进行一个模糊查询的时候,我们可能要带上其他的条件进行查询

这个时候一些朋友就有可能犯这样的一个错误。

例如

$where['status'] = 1;//查询状态为1的数据 
$where['name'] = ['like',"%".$name."%"];

这样去执行的话,thinkphp6不会报错,当我们打印getLastSql的时候,你会发现

很神奇。以下是我自己测试打印的sql,

"SELECT `id`,`proCode`,`name`,`market`,`photo` FROM `hgc_base_direction` WHERE  `name` IN ('like','%苹果%')  AND `status` = 1  AND `hasCert` = 1 LIMIT 0,10"

你们会发现,哎,咋个like查询变成了in查询,是不是很窝火。

我们看下这个源码他是怎么执行的

这是tp6的源码where 逻辑and查询,中间的代码没执行就不看了,直接看最后一句它调用了parseWhereExp那我们直接去这个方法看下这个方法直接看373,374行你这里field过来是个数组,所有又调用了parseArrayWhereItems其他的也不用看,我们再去看下

ook,重点来了,就是这个家伙捣的鬼(再次申明不是程序bug,只是你写错了),看到第463行是不是心都凉了,咋个就给我变成了in查询咧。

其实是你自己写错了。


正确的代码应该是这样写的

$where[] = ['name','like',"%".$name."%"];
$where[] = ['status','=',1];


这样就好了~~~~



关键字
后台 PHP Thinkphp

阅读 2672 发布于 2021-04-13