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+mysql 实现身份验证代码
Mar 24 PHP
PHP采集腾讯微博的实现代码
Jan 19 PHP
php数组去重实例及分析
Nov 26 PHP
PHP 5.3和PHP 5.4出现FastCGI Error解决方法
Feb 12 PHP
php分割合并两个字符串的函数实例
Jun 19 PHP
php通过baihui网API实现读取word文档并展示
Jun 22 PHP
php实现上传图片文件代码
Jul 19 PHP
使用PHP uniqid函数生成唯一ID
Nov 18 PHP
thinkPHP使用post方式查询时分页失效的解决方法
Dec 09 PHP
php实现给一张图片加上水印效果
Jan 02 PHP
PHP的openssl加密扩展使用小结(推荐)
Jul 18 PHP
PHP实现链式操作的原理详解
Sep 16 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 mysql Errcode: 28 终极解决方法
2009/07/01 PHP
php checkdate、getdate等日期时间函数操作详解
2010/03/11 PHP
PHP学习笔记之php文件操作
2016/06/03 PHP
php实现跨域提交form表单的方法【2种方法】
2016/10/17 PHP
php 数组元素快速去重
2017/05/05 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
php利用ob_start()清除输出和选择性输出的方法
2018/01/18 PHP
制作高质量的JQuery Plugin 插件的方法
2010/04/20 Javascript
Javascript实现仿WebQQ界面的“浮云”兼容 IE7以上版本及FF
2011/04/27 Javascript
js弹出窗口之弹出层的小例子
2013/06/17 Javascript
实例讲解JS中数组Array的操作方法
2014/05/09 Javascript
JS动态修改iframe内嵌网页地址的方法
2015/04/01 Javascript
javascript实现Table排序的方法
2015/05/15 Javascript
JS实现三级折叠菜单特效,其它级可自动收缩
2015/08/06 Javascript
Javascript类型系统之undefined和null浅析
2016/07/13 Javascript
浅谈Nodejs中的作用域问题
2016/12/26 NodeJs
微信小程序 配置顶部导航条标题颜色的实现方法
2017/09/20 Javascript
Vue 项目分环境打包的方法示例
2018/08/03 Javascript
VUE引入第三方js包及调用方法讲解
2019/03/01 Javascript
解决Echarts2竖直datazoom滑动后显示数据不全的问题
2020/07/20 Javascript
Python2.x利用commands模块执行Linux shell命令
2016/03/11 Python
Python格式化输出字符串方法小结【%与format】
2018/10/29 Python
python爬取基于m3u8协议的ts文件并合并
2019/04/26 Python
Python 实现数据结构-堆栈和队列的操作方法
2019/07/17 Python
python爬虫多次请求超时的几种重试方法(6种)
2020/12/01 Python
HTML5自定义元素播放焦点图动画的实现
2019/09/25 HTML / CSS
英国鲜花递送:Blossoming Gifts
2020/07/10 全球购物
运动会稿件100字
2014/02/21 职场文书
公司业务员岗位职责
2014/03/18 职场文书
百日安全活动总结
2014/05/04 职场文书
物资采购方案
2014/06/12 职场文书
大跃进口号
2014/06/16 职场文书
教师学习群众路线心得体会
2014/11/04 职场文书
教师党员承诺书2015
2015/01/21 职场文书
2016学习全国教书育人楷模先进事迹心得体会
2016/01/21 职场文书
python通配符之glob模块的使用详解
2021/04/24 Python