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边学边教》(02.Apache+PHP环境配置――上篇)
Dec 13 PHP
实例(Smarty+FCKeditor新闻系统)
Jan 02 PHP
php中批量删除Mysql中相同前缀的数据表的代码
Jul 01 PHP
php mysql 判断update之后是否更新了的方法
Jan 10 PHP
ajax php传递和接收变量实现思路及代码
Dec 19 PHP
ThinkPHP使用UTFWry地址库进行IP定位实例
Apr 01 PHP
PHP 绘制网站登录首页图片验证码
Apr 12 PHP
全面解析PHP验证码的实现原理 附php验证码小案例
Aug 17 PHP
php解决和避免form表单重复提交的几种方法
Aug 31 PHP
PHP观察者模式实例分析【对比JS观察者模式】
May 22 PHP
Laravel使用原生sql语句并调用的方法
Oct 09 PHP
PHP生成图表pChart的示例解析
Jul 31 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函数,php爱好者站推荐
2007/03/19 PHP
PHP与SQL注入攻击[二]
2007/04/17 PHP
php学习笔记之 函数声明(二)
2011/06/09 PHP
利用PHP生成CSV文件简单示例
2016/12/21 PHP
javascript mouseover、mouseout停止事件冒泡的解决方案
2009/04/07 Javascript
Js 回车换行处理的办法及replace方法应用
2013/01/24 Javascript
JQuery插件fancybox无法在弹出层使用左右键的解决办法
2013/12/25 Javascript
javascript向后台传送相同属性的参数即数组参数
2014/02/17 Javascript
用javascript关闭本窗口不弹出询问框的方法
2014/09/12 Javascript
html的DOM中document对象images集合用法实例
2015/01/21 Javascript
JS实现网页游戏中滑块响应鼠标点击移动效果
2015/10/19 Javascript
原生js实现数字字母混合验证码的简单实例
2015/12/10 Javascript
JS实现消息来时让网页标题闪动效果的方法
2016/04/20 Javascript
微信小程序 本地存储及登录页面处理实例详解
2017/01/11 Javascript
javascript 中iframe高度自适应(同域)实例详解
2017/05/16 Javascript
Angular.js实现获取验证码倒计时60秒按钮的简单方法
2017/10/18 Javascript
可用于监控 mysql Master Slave 状态的python代码
2013/02/10 Python
python虚拟环境virtualenv的安装与使用
2017/09/21 Python
Python简单生成随机姓名的方法示例
2017/12/27 Python
Python实现邮件的批量发送的示例代码
2018/01/23 Python
python控制windows剪贴板,向剪贴板中写入图片的实例
2018/05/31 Python
Python判断以什么结尾以什么开头的实例
2018/10/27 Python
如何通过python画loss曲线的方法
2019/06/26 Python
python实现截取屏幕保存文件,删除N天前截图的例子
2019/08/27 Python
Keras中 ImageDataGenerator函数的参数用法
2020/07/03 Python
python爬取youtube视频的示例代码
2021/03/03 Python
中职应届生会计求职信
2013/10/23 职场文书
小学生放飞梦想演讲稿
2014/08/26 职场文书
家庭贫困证明书(3篇)
2014/09/15 职场文书
2015年社区综治宣传月活动总结
2015/03/25 职场文书
《伯牙绝弦》教学反思
2016/02/16 职场文书
《爬天都峰》教学反思
2016/02/23 职场文书
入党申请书怎么写?
2019/06/21 职场文书
vue实现水波涟漪效果的点击反馈指令
2021/05/31 Vue.js
MySQL 时间类型的选择
2021/06/05 MySQL
详解在OpenCV中如何使用图像像素
2022/03/03 Python