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不用正则验证真假身份证
Nov 06 PHP
php stripslashes和addslashes的区别
Feb 03 PHP
PHP使用内置dir类实现目录遍历删除
Mar 31 PHP
简单的php+mysql聊天室实现方法(附源码)
Jan 05 PHP
10个对初学者非常有用的PHP技巧
Apr 06 PHP
学习PHP的数组总结【经验】
May 05 PHP
PHP微信开发之微信消息自动回复下所遇到的坑
May 09 PHP
PHP array_key_exists检查键名或索引是否存在于数组中的实现方法
Jun 13 PHP
PHP+Mysql无刷新问答评论系统(源码)
Dec 20 PHP
PHP+MariaDB数据库操作基本技巧备忘总结
May 21 PHP
laravel model模型定义实现开启自动管理时间created_at,updated_at
Oct 17 PHP
php 使用ActiveMQ发送消息,与处理消息操作示例
Feb 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
写一个用户在线显示的程序
2006/10/09 PHP
PHP开发入门教程之面向对象
2006/12/05 PHP
PHP弹出提示框并跳转到新页面即重定向到新页面
2014/01/24 PHP
使用ThinkPHP生成缩略图及显示
2017/04/27 PHP
php数组指针函数功能及用法示例
2020/02/11 PHP
PHP设计模式概论【概念、分类、原则等】
2020/05/01 PHP
jquery插件 autoComboBox 下拉框
2010/12/22 Javascript
浅说js变量
2011/05/25 Javascript
中国地区三级联动下拉菜单效果分析
2012/11/15 Javascript
js交换排序 冒泡排序算法(Javascript版)
2014/10/04 Javascript
js判断某个方法是否存在实例代码
2015/01/10 Javascript
jQuery基于ajax()使用serialize()提交form数据的方法
2015/12/08 Javascript
tab栏切换原理
2017/03/22 Javascript
JS中关于正则的巧妙操作
2017/08/31 Javascript
浅析vue深复制
2018/01/29 Javascript
详解Vue基于 Nuxt.js 实现服务端渲染(SSR)
2018/04/05 Javascript
解决Nodejs全局安装模块后找不到命令的问题
2018/05/15 NodeJs
JS拖拽排序插件Sortable.js用法实例分析
2019/02/20 Javascript
基于vue通用表单解决方案的思考与分析
2019/03/16 Javascript
vue elementUI使用tabs与导航栏联动
2019/06/21 Javascript
Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)
2014/05/06 Python
Python数据可视化正态分布简单分析及实现代码
2017/12/04 Python
python3+PyQt5自定义视图详解
2018/04/24 Python
tensorflow多维张量计算实例
2020/02/11 Python
美国婴童服装市场上的领先品牌:Carter’s
2018/02/08 全球购物
蔻驰西班牙官网:COACH西班牙
2019/01/16 全球购物
在对linux系统分区进行格式化时需要对磁盘簇(或i节点密度)的大小进行选择,请说明选择的原则
2012/11/24 面试题
汽车专业毕业生推荐信
2013/11/12 职场文书
办公室人员先进事迹
2014/01/27 职场文书
金融管理专业毕业生求职信
2014/03/12 职场文书
药剂专业毕业生求职信
2014/06/24 职场文书
保险公司演讲稿
2014/09/02 职场文书
销售员试用期自我评价
2014/09/15 职场文书
环境工程专业毕业生求职信
2014/09/30 职场文书
调任通知
2015/04/21 职场文书
防震减灾主题班会
2015/08/14 职场文书