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 相关文章推荐
简单介绍下 PHP5 中引入的 MYSQLI的用途
Mar 19 PHP
php字符串截取的简单方法
Jul 04 PHP
thinkphp的CURD和查询方式介绍
Dec 19 PHP
php将mysql数据库整库导出生成sql文件的具体实现
Jan 08 PHP
PHP处理JSON字符串key缺少双引号的解决方法
Sep 16 PHP
PHP生成条形图的方法
Dec 10 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
Feb 08 PHP
PHP 验证登陆类分享
Mar 13 PHP
Zend Framework教程之Zend_Db_Table_Row用法实例分析
Mar 21 PHP
PHP+MySql+jQuery实现的&quot;顶&quot;和&quot;踩&quot;投票功能
May 21 PHP
PHP中模糊查询并关联三个select框
Jun 19 PHP
PHP设计模式之模板方法模式实例浅析
Dec 20 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
在项目中寻找代码的坏命名
2012/07/14 PHP
Zend Framework教程之路由功能Zend_Controller_Router详解
2016/03/07 PHP
php自定义函数实现JS的escape的方法示例
2016/07/07 PHP
php生成图片缩略图功能示例
2017/02/22 PHP
node.js中的buffer.Buffer.isEncoding方法使用说明
2014/12/14 Javascript
nodejs中实现阻塞实例
2015/03/24 NodeJs
BootStrap table表格插件自适应固定表头(超好用)
2016/08/24 Javascript
vue+iview 实现可编辑表格的示例代码
2018/10/31 Javascript
JSON.stringify()方法讲解
2019/01/31 Javascript
jquery实现Ajax请求的几种常见方式总结
2019/05/28 jQuery
layui复选框限制选择个数的方法
2019/09/18 Javascript
在 Vue 中使用 JSX 及使用它的原因浅析
2020/02/10 Javascript
vue利用全局导航守卫作登录后跳转到未登录前指定页面的实例代码
2020/05/19 Javascript
深入解读VUE中的异步渲染的实现
2020/06/19 Javascript
vue浏览器返回监听的具体步骤
2021/02/03 Vue.js
Python def函数的定义、使用及参数传递实现代码
2014/08/10 Python
小米5s微信跳一跳小程序python源码
2018/01/08 Python
关于django 数据库迁移(migrate)应该知道的一些事
2018/05/27 Python
django实现web接口 python3模拟Post请求方式
2019/11/19 Python
浅析Python 抽象工厂模式的优缺点
2020/07/13 Python
python中最小二乘法详细讲解
2021/02/19 Python
TensorFlow低版本代码自动升级为1.0版本
2021/02/20 Python
HTML5 weui使用笔记
2019/11/21 HTML / CSS
中东奢侈品市场:Coveti
2019/05/12 全球购物
丝芙兰意大利官方网站:Sephora.it
2019/12/13 全球购物
远程教育心得体会
2014/01/03 职场文书
大学信息公开实施方案
2014/03/09 职场文书
演讲稿格式
2014/04/30 职场文书
店面出租协议书范本
2014/11/28 职场文书
2014年应急工作总结
2014/12/11 职场文书
教师党员承诺书2015
2015/01/21 职场文书
嘉宾邀请函
2015/01/31 职场文书
关于做家务的心得体会
2016/01/23 职场文书
2016党风廉政建设心得体会范文
2016/01/25 职场文书
2019年大学毕业生个人自我鉴定范文大全
2019/03/21 职场文书
MySQL Router的安装部署
2021/04/24 MySQL