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 相关文章推荐
对javascript和select部件的结合运用
Oct 09 PHP
解决phpmyadmin中文乱码问题。。。
Jan 18 PHP
PHP Squid中可缓存的动态网页设计
Sep 17 PHP
php设计模式 Bridge (桥接模式)
Jun 26 PHP
PHP中的cookie不用刷新就生效的方法
Feb 04 PHP
PIGCMS 如何关闭聊天机器人
Feb 12 PHP
利用PHP脚本在Linux下用md5函数加密字符串的方法
Jun 29 PHP
Codeigniter中集成smarty和adodb的方法
Mar 04 PHP
php写app接口并返回json数据的实例(分享)
May 20 PHP
PHP排序算法之堆排序(Heap Sort)实例详解
Apr 21 PHP
Laravel如何同时连接多个数据库详解
Aug 13 PHP
PHP+redis实现的限制抢购防止商品超发功能详解
Sep 19 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
PHP中array_merge和array相加的区别分析
2013/06/17 PHP
php把数据表导出为Excel表的最简单、最快的方法(不用插件)
2014/05/10 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
2020/08/03 PHP
在IE中调用javascript打开Excel的代码(downmoon原作)
2007/04/02 Javascript
jquery select选中的一个小问题
2009/10/11 Javascript
JavaScript DOM 学习第五章 表单简介
2010/02/19 Javascript
js中arguments的用法(实例讲解)
2013/11/30 Javascript
基于jQuery Bar Indicator 插件实现进度条展示效果
2015/09/30 Javascript
jQuery密码强度检测插件passwordStrength用法实例分析
2015/10/30 Javascript
URL的参数中有加号传值变为空格的问题(URL特殊字符)
2016/11/04 Javascript
基于JS实现弹出一个隐藏的div窗口body页面变成灰色并且不可被编辑
2016/12/14 Javascript
原生JS实现九宫格抽奖效果
2017/04/01 Javascript
微信小程序开发之数据存储 参数传递 数据缓存
2017/04/13 Javascript
微信小程序实战之轮播图(3)
2017/04/17 Javascript
node.js + socket.io 实现点对点随机匹配聊天
2017/06/30 Javascript
手机注册发送验证码倒计时的简单实例
2017/11/15 Javascript
微信小程序实现签字功能
2019/12/23 Javascript
JavaScript实现拖拽功能
2020/02/11 Javascript
JavaScript实现旋转木马轮播图
2020/03/16 Javascript
js中调用微信的扫描二维码功能的实现代码
2020/04/11 Javascript
JS中作用域以及变量范围分析
2020/07/18 Javascript
5分钟 Pipenv 上手指南
2018/12/20 Python
Python接口测试结果集实现封装比较
2020/05/01 Python
Python QT组件库qtwidgets的使用
2020/11/02 Python
使用CSS3 制作一个material-design 风格登录界面实例
2016/12/12 HTML / CSS
PyQt QMainWindow的使用示例
2021/03/24 Python
技术总监个人的自我评价范文
2013/12/18 职场文书
幼儿园保育员辞职信
2014/01/12 职场文书
潘婷洗发水广告词
2014/03/14 职场文书
区级文明单位申报材料
2014/05/15 职场文书
主题团日活动总结
2014/06/25 职场文书
领导班子四风对照检查材料
2014/09/23 职场文书
护士先进个人总结
2015/02/13 职场文书
听证通知书
2015/04/24 职场文书
现货白银电话营销话术
2015/05/29 职场文书
python中24小时制转换为12小时制的方法
2021/06/18 Python