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 相关文章推荐
基于mysql的论坛(5)
Oct 09 PHP
IStream与TStream之间的相互转换
Aug 01 PHP
php 静态页面中显示动态内容
Aug 14 PHP
PHP 时间日期操作实战
Aug 26 PHP
php中防止恶意刷新页面的代码小结
Oct 31 PHP
php获取错误信息的方法
Jul 17 PHP
PHP+jQuery翻板抽奖功能实现
Oct 19 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
Jan 19 PHP
PHP多维数组元素操作类的方法
Nov 14 PHP
phpcms配置列表页以及获得文章发布时间
Jul 04 PHP
Thinkphp整合阿里云OSS图片上传实例代码
Apr 28 PHP
Laravel如何实现自动加载类
Oct 14 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 基础教程(三)
2006/10/09 PHP
PHP Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\
2012/06/17 PHP
PHP的拦截器实例分析
2014/11/03 PHP
CodeIgniter记录错误日志的方法全面总结
2016/05/17 PHP
THINKPHP在添加数据的时候获取主键id的值方法
2017/04/03 PHP
在Laravel5中正确设置文件权限的方法
2019/05/22 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
2019/10/21 PHP
JScript中的&quot;this&quot;关键字使用方式补充材料
2007/03/08 Javascript
Script的加载方法小结
2011/01/12 Javascript
jQuery中ajax和post处理json的不同示例对比
2014/11/02 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
2016/02/29 Javascript
微信js-sdk分享功能接口常用逻辑封装示例
2016/10/13 Javascript
Angular2学习笔记——详解NgModule模块
2016/12/02 Javascript
ajax异步请求详解
2017/01/06 Javascript
微信小程序实现折叠面板
2018/01/31 Javascript
使用Vue构建可重用的分页组件
2018/03/26 Javascript
Node.js 使用AngularJS的方法示例
2018/05/11 Javascript
利用Decorator如何控制Koa路由详解
2018/06/26 Javascript
使用react context 实现vue插槽slot功能
2019/07/18 Javascript
layui 选择列表,打勾,点击确定返回数据的例子
2019/09/02 Javascript
微信小程序绑定手机号获取验证码功能
2019/10/22 Javascript
python 实现归并排序算法
2012/06/05 Python
使用python实现递归版汉诺塔示例(汉诺塔递归算法)
2014/04/08 Python
Python中基本的日期时间处理的学习教程
2015/10/16 Python
python中利用队列asyncio.Queue进行通讯详解
2017/09/10 Python
使用Numpy读取CSV文件,并进行行列删除的操作方法
2018/07/04 Python
Flask框架响应、调度方法和蓝图操作实例分析
2018/07/24 Python
寻找完美的房车租赁:RVShare
2019/02/23 全球购物
Antonioli美国在线商店:时尚前卫奢华
2019/07/29 全球购物
奥巴马经典演讲稿
2014/09/13 职场文书
个人自荐书范文
2015/03/09 职场文书
2015年乡镇纪检工作总结
2015/04/22 职场文书
表扬信范文
2015/05/04 职场文书
JavaScript 原型与原型链详情
2021/11/02 Javascript
Javascript的promise,async和await的区别详解
2022/03/24 Javascript
Nginx报404错误的详细解决方法
2022/07/23 Servers