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 30 PHP
PHP在线生成二维码代码(google api)
Jun 03 PHP
解析Ubuntu下crontab命令的用法
Jun 24 PHP
php实现mysql备份恢复分卷处理的方法
Dec 26 PHP
php实现上传图片保存到数据库的方法
Feb 11 PHP
php中判断数组相等的方法以及数组运算符介绍
Mar 30 PHP
四个PHP非常实用的功能
Sep 29 PHP
深入理解PHP内核(二)之SAPI探究
Nov 10 PHP
Zend Framework教程之视图组件Zend_View用法详解
Mar 05 PHP
PHP微信企业号开发之回调模式开启与用法示例
Nov 25 PHP
php获取ajax的headers方法与内容实例
Dec 27 PHP
PHP程序守护进程化实现方法详解
Jul 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
jQuery 源码分析笔记
2011/05/25 PHP
分享一个php 的异常处理程序
2014/06/22 PHP
利用PHP将图片转换成base64编码的实现方法
2016/09/13 PHP
PHP的PDO错误与错误处理
2019/01/27 PHP
jQuery JSON的解析方式分享
2011/04/05 Javascript
js中方法重载如何实现?以及函数的参数问题
2013/08/01 Javascript
js仿3366小游戏选字游戏
2016/04/14 Javascript
实例详解jQuery的无new构建
2016/08/02 Javascript
郁闷!ionic中获取ng-model绑定的值为undefined如何解决
2016/08/27 Javascript
JavaScript基于自定义函数判断变量类型的实现方法
2016/11/23 Javascript
php register_shutdown_function函数详解
2017/07/23 Javascript
Angularjs实现多图片上传预览功能
2018/07/18 Javascript
Node配合WebSocket做多文件下载以及进度回传
2019/11/07 Javascript
React组件设计模式之组合组件应用实例分析
2020/04/29 Javascript
三步搞定:Vue.js调用Android原生操作
2020/09/07 Javascript
Python处理菜单消息操作示例【基于win32ui模块】
2018/05/09 Python
python散点图实例之随机漫步
2018/08/27 Python
python利用ffmpeg进行录制屏幕的方法
2019/01/10 Python
Python OOP类中的几种函数或方法总结
2019/02/22 Python
django admin后台添加导出excel功能示例代码
2019/05/15 Python
python eventlet绿化和patch原理
2020/11/21 Python
Python模拟键盘输入自动登录TGP
2020/11/27 Python
Python3.9.1中使用match方法详解
2021/02/08 Python
谈谈对css属性box-sizing的了解
2017/01/04 HTML / CSS
工程班组长岗位职责
2013/12/30 职场文书
求职信需要的五点内容
2014/02/01 职场文书
化学教学随笔感言
2014/02/19 职场文书
促销活动总结
2014/04/28 职场文书
反四风个人对照检查材料思想汇报
2014/09/25 职场文书
2014年乡镇工会工作总结
2014/12/02 职场文书
2015年教师自我评价范文
2015/03/04 职场文书
奖金申请报告模板
2015/05/15 职场文书
《所见》教学反思
2016/02/23 职场文书
2016年万圣节活动总结
2016/04/05 职场文书
Linux安装Nginx步骤详解
2021/03/31 Servers
js中Object.create实例用法详解
2021/10/05 Javascript