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数据库操作类
Sep 02 PHP
Excel数据导入Mysql数据库的实现代码
Jun 05 PHP
php mysql索引问题
Jun 07 PHP
表格展示无限级分类(PHP版)
Aug 21 PHP
php object转数组示例
Jan 15 PHP
浅谈thinkphp的实例化模型
Jan 04 PHP
Nginx下配置codeigniter框架方法
Apr 07 PHP
php实现购物车功能(下)
Jan 05 PHP
PHP简单实现解析xml为数组的方法
May 02 PHP
PHP实现微信提现功能
Sep 30 PHP
PHP+jQuery实现双击修改table表格功能示例
Feb 21 PHP
PHP call_user_func和call_user_func_array函数的简单理解与应用分析
Nov 25 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
URL Rewrite的设置方法
2007/01/02 PHP
浅析PHP文件下载原理
2014/12/25 PHP
分享微信扫码支付开发遇到问题及解决方案-附Ecshop微信支付插件
2015/08/23 PHP
PHP身份证校验码计算方法
2016/08/10 PHP
php输出含有“#”字符串的方法
2017/01/18 PHP
thinkphp框架page类与bootstrap分页(美化)
2017/06/25 PHP
PHP实现基于状态的责任链审批模式详解
2019/05/31 PHP
JS 学习笔记 防止发生命名冲突
2009/07/30 Javascript
javascript 面向对象继承
2009/11/26 Javascript
uploadify 3.0 详细使用说明
2012/06/18 Javascript
javascript修改表格背景色实例代码分享
2013/12/10 Javascript
js数组与字符串的相互转换方法
2014/07/09 Javascript
JavaScript中document对象使用详解
2015/01/06 Javascript
javascript省市级联功能实现方法实例详解
2015/10/20 Javascript
JS实现从顶部下拉显示的带动画QQ客服特效代码
2015/10/24 Javascript
微信小程序 vidao实现视频播放和弹幕的功能
2016/11/02 Javascript
微信小程序 五星评分(包括半颗星评分)实例代码
2016/12/14 Javascript
vue中使用rem布局代码详解
2019/10/30 Javascript
vue3.0 的 Composition API 的使用示例
2020/10/26 Javascript
Python基于tkinter模块实现的改名小工具示例
2017/07/27 Python
Python基于回溯法子集树模板解决马踏棋盘问题示例
2017/09/11 Python
python实现向微信用户发送每日一句 python实现微信聊天机器人
2019/03/27 Python
Opencv实现抠图背景图替换功能
2019/05/21 Python
通过 Python 和 OpenCV 实现目标数量监控
2020/01/05 Python
浅谈python 中的 type(), dtype(), astype()的区别
2020/04/09 Python
jupyter notebook 添加kernel permission denied的操作
2020/04/21 Python
Python Selenium截图功能实现代码
2020/04/26 Python
小学教师的个人自我鉴定
2013/10/24 职场文书
4s店总经理岗位职责
2013/12/31 职场文书
安全生产检查通报
2014/01/29 职场文书
单方投资意向书
2015/05/11 职场文书
傲慢与偏见读书笔记
2015/06/29 职场文书
一看就懂的MySQL的聚簇索引及聚簇索引是如何长高的
2021/05/25 MySQL
使用tensorflow 实现反向传播求导
2021/05/26 Python
Python爬虫基础之初次使用scrapy爬虫实例
2021/06/26 Python
实操Python爬取觅知网素材图片示例
2021/11/27 Python