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 07 PHP
PHP-redis中文文档介绍
Feb 07 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(四)
Jun 23 PHP
Laravel 5 框架入门(一)
Apr 09 PHP
PHP基于文件存储实现缓存的方法
Jul 20 PHP
PHP中使用curl伪造IP的简单方法
Aug 07 PHP
PHP中的表达式简述
May 29 PHP
常用PHP数组排序函数归纳
Aug 08 PHP
php版微信公众账号第三方管理工具开发简明教程
Sep 23 PHP
Laravel框架Blade模板简介及模板继承用法分析
Dec 03 PHP
php高性能日志系统 seaslog 的安装与使用方法分析
Feb 29 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
Apr 06 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
VOLVO车载收音机
2021/03/02 无线电
PHP获取一年有几周以及每周开始日期和结束日期
2015/08/06 PHP
thinkPHP删除前弹出确认框的简单实现方法
2016/05/16 PHP
php使用file函数、fseek函数读取大文件效率对比分析
2016/11/04 PHP
读jQuery之六 缓存数据功能介绍
2011/06/21 Javascript
判断输入是否为空,获得输入类型的JS代码
2013/10/30 Javascript
JavaScript利用append添加元素报错的解决方法
2014/07/01 Javascript
浅谈javascript回调函数
2014/12/07 Javascript
js实现带圆角的两级导航菜单效果代码
2015/08/24 Javascript
bootstrap laydate日期组件使用详解
2017/01/04 Javascript
node 利用进程通信实现Cluster共享内存
2017/10/27 Javascript
javascript高级模块化require.js的具体使用方法
2017/10/31 Javascript
如何使用less实现随机下雪动画详解
2019/01/02 Javascript
Vue响应式原理Observer、Dep、Watcher理解
2019/06/06 Javascript
js实现for循环跳过undefined值示例
2019/07/02 Javascript
[02:22:36]《加油!DOTA》总决赛
2014/09/19 DOTA
[56:21]LGD vs IG 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
用Python实现一个简单的线程池
2015/04/07 Python
python选择排序算法实例总结
2015/07/01 Python
python 保存float类型的小数的位数方法
2018/10/17 Python
学生信息管理系统Python面向对象版
2019/01/30 Python
解决Python 使用h5py加载文件,看不到keys()的问题
2019/02/08 Python
使用python实现离散时间傅里叶变换的方法
2019/09/02 Python
Keras设置以及获取权重的实现
2020/06/19 Python
Python如何急速下载第三方库详解
2020/11/02 Python
VSCODE配置Markdown及Markdown基础语法详解
2021/01/19 Python
美国女士泳装店:Swimsuits For All
2017/03/02 全球购物
链表面试题-一个链表的结点结构
2015/05/04 面试题
sort命令的作用和用法
2012/11/04 面试题
出口公司经理求职简历中的自我评价
2013/10/13 职场文书
20年同学聚会邀请函
2014/02/04 职场文书
内衣营销方案
2014/03/15 职场文书
临床医师个人自我评价
2014/04/06 职场文书
介绍信的写法
2015/01/31 职场文书
幽默口才训练经典句子(48句)
2019/08/19 职场文书
python前后端自定义分页器
2022/04/13 Python