当前位置: 首页 » 产品 » 微商货源 » 正文

Yii框架参数化查询中IN查询只能查询一个怎么办

放大字体  缩小字体 发布日期: 2024-09-25 08:22   来源:http://www.baidu.com/  作者:无忧资讯  浏览次数:11
核心提示:在yii框架中使用参数化进行IN查询时,结果不如所愿$sql=SQLSELECt id FROM tb WHERe id IN(:ids)SQL;$db=GeneralServi

在yii框架中使用参数化进行IN查询时,结果不如所愿

$sql=<<<SQL SELECt id FROM tb WHERe id IN(:ids) SQL; $db=GeneralService::getSlaveDB(); $result=$db->createCommand($sql)->query([':ids'=> '1013,1015,1017'])->readAll(); print_r($result);

Array ( [0]=> Array ( [id]=> 1013 ) )

于是翻了yii框架中相关源码,发现采用的是pdo查询,于是又查询了pdo相关资料,知道了原因:不能让占位符代替一组值

SELECt id FROM tb WHERe userid IN ( ? );

既然知道了原因,那么就找到替代的方法,FIND_IN_SET正好可以满足

$sql=<<<SQL SELECt id FROM tb WHERe FIND_IN_SET(id, :ids) SQL; $db=GeneralService::getSlaveDB(); $result=$db->createCommand($sql)->query([':ids'=> '1013,1015,1017'])->readAll(); print_r($result);

Array ( [0]=> Array ( [id]=> 1013 ) [1]=> Array ( [id]=> 1015 ) [2]=> Array ( [id]=> 1017 ) )

简单科普下FIND_IN_SET函数

FIND_IN_SET(str,strlist)

假如字符串str在由N子链组成的字符串列表strlist中,则返回值的范围在 1 到 N 之间。

一个字符串列表就是一个由一些被 ‘,' 符号分开的子链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则   FIND_IN_SET() 函数被优化,使用比特计算。

如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。这个函数在第一个参数包含一个逗号(‘,')时将无法正常运行。

【ps】strlist中由逗号组成的字符串,不能像平常习惯的那样,逗号右边加个空格,那是认不出来的。

 
 
[ 产品搜索 ]  [ 加入收藏 ]  [ 告诉好友 ]  [ 打印本文 ]  [ 违规举报 ]  [ 关闭窗口 ]

 

 
推荐图文
推荐产品
点击排行
    行业协会  备案信息  可信网站