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 相关文章推荐
PR值查询 | PageRank 查询
Dec 20 PHP
PHP三元运算符的结合性介绍
Jan 10 PHP
Eclipse中php插件安装及Xdebug配置的使用详解
Apr 25 PHP
深入解析yii权限分级式访问控制的实现(非RBAC法)
Jun 13 PHP
PHP实现显示照片exif信息的方法
Jul 11 PHP
PHP实现过滤各种HTML标签
May 17 PHP
浅谈php错误提示及查错方法
Jul 14 PHP
php生成无限栏目树
Mar 16 PHP
Ubuntu 16.04下安装PHP 7过程详解
Mar 28 PHP
PHP实现的多维数组排序算法分析
Feb 10 PHP
PHP架构及原理知识点详解
Dec 22 PHP
php 的多进程操作实践案例分析
Feb 28 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
用session做客户验证时的注意事项
2006/10/09 PHP
PHP用GD库生成高质量的缩略图片
2011/03/09 PHP
屏蔽机器人从你的网站搜取email地址的php代码
2012/11/14 PHP
将FCKeditor导入PHP+SMARTY的实现方法
2015/01/15 PHP
PHP实现的大文件切割与合并功能示例
2018/04/10 PHP
实现php删除链表中重复的结点
2018/09/27 PHP
Stop SQL Server
2007/06/21 Javascript
使用自定义setTimeout和setInterval使之可以传递参数和对象参数
2009/04/24 Javascript
Jquery通过Ajax方式来提交Form表单的具体实现
2013/11/07 Javascript
ajax异步请求详解
2017/01/06 Javascript
react-native ListView下拉刷新上拉加载实现代码
2017/08/03 Javascript
Node做中转服务器转发接口
2017/10/18 Javascript
Vue波纹按钮组件制作
2018/04/30 Javascript
默认浏览器设置及vue自动打开页面的方法
2018/09/21 Javascript
js canvas实现橡皮擦效果
2018/12/20 Javascript
js实现小星星游戏
2020/03/23 Javascript
antd design table更改某行数据的样式操作
2020/10/31 Javascript
Anaconda多环境多版本python配置操作方法
2017/09/12 Python
对python PLT中的image和skimage处理图片方法详解
2019/01/10 Python
Python图像处理PIL各模块详细介绍(推荐)
2019/07/17 Python
Python 在OpenCV里实现仿射变换—坐标变换效果
2019/08/30 Python
PyTorch中的padding(边缘填充)操作方式
2020/01/03 Python
自定义实现 PyQt5 下拉复选框 ComboCheckBox的完整代码
2020/03/30 Python
python列表的逆序遍历实现
2020/04/20 Python
python pyecharts 实现一个文件绘制多张图
2020/05/13 Python
美国时尚孕妇装品牌:A Pea in the Pod
2017/07/16 全球购物
解释下面关于J2EE的名词
2013/11/15 面试题
入党转预备思想汇报
2014/01/07 职场文书
《小草和大树》教学反思
2014/02/16 职场文书
广告设计应届生求职信
2014/03/01 职场文书
感恩老师演讲稿600字
2014/08/28 职场文书
党员教师学习党的群众路线教育实践活动心得体会
2014/10/31 职场文书
2014年学生会生活部工作总结
2014/11/07 职场文书
工程部主管岗位职责
2015/02/12 职场文书
单位车辆管理制度
2015/08/05 职场文书
优质护理心得体会
2016/01/22 职场文书