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程序
Oct 09 PHP
基于mysql的论坛(3)
Oct 09 PHP
用ODBC的分页显示
Oct 09 PHP
php 过滤器实现代码
Aug 09 PHP
基于PHP常用函数的用法详解
May 10 PHP
Thinkphp中Create方法深入探究
Jun 16 PHP
destoon在360浏览器下出现用户被强行注销的解决方法
Jun 26 PHP
Laravel 4 初级教程之安装及入门
Oct 30 PHP
开启PHP的伪静态模式
Dec 31 PHP
使用PHPStorm+XDebug搭建单步调试环境
Nov 19 PHP
php实现获取近几日、月时间示例
Jul 06 PHP
redis+php实现微博(一)注册与登录功能详解
Sep 23 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
叶罗丽:为什么大家对颜冰这对CP非常关心,却对金茉两人十分冷漠
2020/03/17 国漫
PHP语法速查表
2006/12/06 PHP
PHP 访问数据库配置通用方法(json)
2018/05/20 PHP
php微信支付之公众号支付功能
2018/05/30 PHP
Laravel 模型关联基础教程详解
2019/09/17 PHP
求解开jscript.encode代码的asp函数
2007/02/28 Javascript
Javascript+XMLHttpRequest+asp.net无刷新读取数据库数据
2009/08/09 Javascript
javascript 面向对象编程 聊聊对象的事
2009/09/17 Javascript
jquery 学习之二 属性(类)
2010/11/25 Javascript
jQuery)扩展jQuery系列之一 模拟alert,confirm(一)
2010/12/04 Javascript
深入理解JavaScript系列(1) 编写高质量JavaScript代码的基本要点
2012/01/15 Javascript
单击浏览器右上角的X关闭窗口弹出提示的小例子
2013/06/12 Javascript
可选择和输入的下拉列表框示例
2013/11/05 Javascript
jquery中交替点击事件toggle方法的使用示例
2013/12/08 Javascript
浅谈JavaScript事件绑定的常用方法及其优缺点分析
2016/11/01 Javascript
基于JavaScript实现全选、不选和反选效果
2017/02/15 Javascript
JS获取填报扩展单元格控件的值的解决办法
2017/07/14 Javascript
jQuery 实现批量提交表格多行数据的方法
2018/08/09 jQuery
详解关于vue2.0工程发布上线操作步骤
2018/09/27 Javascript
Vue2.0 实现页面缓存和不缓存的方式
2019/11/12 Javascript
vue全屏事件开发详解
2020/06/17 Javascript
JavaScript监听键盘事件代码实现
2020/06/03 Javascript
[01:04:22]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 IG vs EG
2018/04/01 DOTA
基于Django的ModelForm组件(详解)
2017/12/07 Python
PYQT5设置textEdit自动滚屏的方法
2019/06/14 Python
Python笔试面试题小结
2019/09/07 Python
Django Path转换器自定义及正则代码实例
2020/05/29 Python
几款Python编译器比较与推荐(小结)
2020/10/15 Python
详解rem 适配布局
2018/10/31 HTML / CSS
Lee牛仔裤澳大利亚官网:美国著名牛仔裤品牌
2017/09/02 全球购物
如何使用PHP session
2015/04/21 面试题
2013英文求职信模板范文
2013/11/15 职场文书
财务工作疏忽检讨书
2014/09/11 职场文书
经理岗位职责
2015/02/02 职场文书
2015社区精神文明建设工作总结
2015/04/21 职场文书
MySQL 自动填充 create_time 和 update_time
2022/05/20 MySQL