Yii框架参数化查询中IN查询只能查询一个的解决方法


Posted in PHP onMay 20, 2017

本文实例讲述了Yii框架参数化查询中IN查询只能查询一个的解决方法。分享给大家供大家参考,具体如下:

在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中由逗号组成的字符串,不能像平常习惯的那样,逗号右边加个空格,那是认不出来的。

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

PHP 相关文章推荐
介绍php设计模式中的工厂模式
Jun 12 PHP
一个PHP数组应该有多大的分析
Jul 30 PHP
PHPwind整合最土系统用户同步登录实现方法
Dec 08 PHP
php中防止恶意刷新页面的代码小结
Oct 31 PHP
php cli 小技巧
Jun 03 PHP
如何使用FireFox插件FirePHP调试PHP
Jul 23 PHP
Laravel 5框架学习之Laravel入门和新建项目
Apr 07 PHP
PHP中的流(streams)浅析
Jul 02 PHP
PHP调用存储过程返回值不一致问题的解决方法分析
Apr 26 PHP
Thinkphp 中 distinct 的用法解析
Dec 14 PHP
PHP生成随机数的方法总结
Mar 01 PHP
thinkphp5 框架结合plupload实现图片批量上传功能示例
Apr 04 PHP
Yii框架使用魔术方法实现跨文件调用功能示例
May 20 #PHP
Yii框架实现的验证码、登录及退出功能示例
May 20 #PHP
利用Laravel事件系统如何实现登录日志的记录详解
May 20 #PHP
Yii框架实现图片上传的方法详解
May 20 #PHP
Yii框架分页实现方法详解
May 20 #PHP
thinkPHP显示不出验证码的原因与解决方法分析
May 20 #PHP
yii2项目实战之restful api授权验证详解
May 20 #PHP
You might like
百事可乐也出咖啡了 双倍咖啡因双倍快乐
2021/03/03 咖啡文化
PHP+MYSQL的文章管理系统(一)
2006/10/09 PHP
php的ZipArchive类用法实例
2014/10/20 PHP
解决出现SoapFault (looks like we got no XML document)的问题
2017/06/24 PHP
js 数据类型转换总结笔记
2011/01/17 Javascript
jQuery 源码分析笔记(2) 变量列表
2011/05/28 Javascript
js实现一个省市区三级联动选择框代码分享
2013/03/06 Javascript
SwfUpload在IE10上不出现上传按钮的解决方法
2013/06/25 Javascript
js中数组(Array)的排序(sort)注意事项说明
2014/01/24 Javascript
iframe里使用JavaScript控制主页转向的方法
2015/04/03 Javascript
创建你的第一个AngularJS应用的方法
2015/06/16 Javascript
Bootstrap开发实战之响应式轮播图
2016/06/02 Javascript
jquery对象和DOM对象的相互转换详解
2016/10/18 Javascript
将json转换成struts参数的方法
2016/11/08 Javascript
AngularJS表单验证功能分析
2017/05/26 Javascript
JavaScript之DOM插入更新删除_动力节点Java学院整理
2017/07/03 Javascript
JS实现导出Excel的五种方法详解【附源码下载】
2018/03/15 Javascript
JS 实现微信扫一扫功能
2018/09/14 Javascript
小程序实现搜索界面 小程序实现推荐搜索列表效果
2019/05/18 Javascript
[03:31]DOTA2英雄基础教程 大地之灵
2013/12/17 DOTA
[01:06:32]DOTA2上海特级锦标赛D组资格赛#1 EG VS VP第一局
2016/02/28 DOTA
python实现linux服务器批量修改密码并生成execl
2014/04/22 Python
详解python多线程、锁、event事件机制的简单使用
2018/04/27 Python
selenium+python环境配置教程详解
2019/05/28 Python
J.Crew官网:美国知名休闲服装品牌
2017/05/19 全球购物
科茨沃尔德家居商店:Scotts of Stow
2018/06/29 全球购物
荷兰时尚精品店:Labels Fashion
2020/03/22 全球购物
制定岗位职责的原则
2013/11/08 职场文书
工程师岗位职责规定
2014/02/26 职场文书
高一课前三分钟演讲稿
2014/09/13 职场文书
退休党员个人对照检查材料思想汇报
2014/09/29 职场文书
自我推荐信怎么写
2015/03/24 职场文书
毕业论文致谢信
2015/05/14 职场文书
电影小兵张嘎观后感
2015/06/03 职场文书
HTML5页面音频自动播放的实现方式
2021/06/21 HTML / CSS
详解MongoDB的条件查询和排序
2021/06/23 MongoDB