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 抓取网页图片并且另存为的实现代码
Mar 24 PHP
Zend Studio (eclipse)使用速度优化方法
Mar 23 PHP
php和数据库结合的一个简单的web实例 代码分析 (php初学者)
Jul 28 PHP
PHP无法访问远程mysql的问题分析及解决
May 16 PHP
PHP中模拟处理HTTP PUT请求的例子
Jul 22 PHP
php使用sql server验证连接数据库的方法
Dec 25 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
Jun 13 PHP
PHP中的函数声明与使用详解
May 27 PHP
thinkphp5框架扩展redis类方法示例
May 06 PHP
PHP下用Swoole实现Actor并发模型的方法
Jun 12 PHP
PHP中常用的三种设计模式详解【单例模式、工厂模式、观察者模式】
Jun 14 PHP
Thinkphp5框架ajax接口实现方法分析
Aug 28 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 COOKIE立即生效,不用刷新就可以使用
2011/03/09 PHP
PHP学习之输出字符串(echo,print,printf,print_r和var_dump)
2011/04/17 PHP
php HandlerSocket的使用
2011/05/02 PHP
PHP生成网站桌面快捷方式代码分享
2014/10/11 PHP
php实现删除指定目录下相关文件的方法
2014/10/20 PHP
php生成短域名函数
2015/03/23 PHP
Yii扩展组件编写方法实例分析
2015/06/29 PHP
php注册登录系统简化版
2020/12/28 PHP
jQuery选中select控件 无法设置selected的解决方法
2010/09/01 Javascript
innerHTML与jquery里的html()区别介绍
2012/10/12 Javascript
ExtJS中设置下拉列表框不可编辑的方法
2014/05/07 Javascript
js时间日期格式化封装函数
2014/12/02 Javascript
js实现编辑div节点名称的方法
2014/12/17 Javascript
JavaScript程序中的流程控制语句用法总结
2016/05/23 Javascript
简单实现JS计算器功能
2016/12/21 Javascript
JS实现给json数组动态赋值的方法示例
2020/03/19 Javascript
浅谈React中的元素、组件、实例和节点
2018/02/27 Javascript
vuex进阶知识点巩固
2018/05/20 Javascript
jquery中为什么能用$操作
2019/06/18 jQuery
JS实现滑动插件
2020/01/15 Javascript
vue-cli3.0实现一个多页面应用的历奇经历记录总结
2020/03/16 Javascript
Ubuntu下安装PyV8
2016/03/13 Python
Python3学习urllib的使用方法示例
2017/11/29 Python
python OpenCV学习笔记直方图反向投影的实现
2018/02/07 Python
python实现逐个读取txt字符并修改
2018/12/24 Python
python实现回旋矩阵方式(旋转矩阵)
2019/12/04 Python
解决启动django,浏览器显示“服务器拒绝访问”的问题
2020/05/13 Python
Python下划线5种含义代码实例解析
2020/07/10 Python
CSS3 分类菜单效果
2019/05/27 HTML / CSS
美国孕妇装品牌:Destination Maternity
2018/02/04 全球购物
jQuery treeview树形结构应用
2021/03/24 jQuery
双十佳事迹材料
2014/01/29 职场文书
各营销点岗位职责范本
2014/03/05 职场文书
幼儿园安全工作总结2015
2015/04/20 职场文书
如何写好开幕词?
2019/06/24 职场文书
python本地文件服务器实例教程
2021/05/02 Python