Yii框架参数化查询中IN查询只能查询一个的解决方法

本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《Yii框架入门及常用技巧总结》、《php优秀开发框架总结》、《smarty模板入门基础教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》

希望本文所述对大家基于Yii框架的PHP程序设计有所帮助。

时间: 2024-12-22 14:17:01

Yii框架参数化查询中IN查询只能查询一个的解决方法的相关文章

Yii框架防止sql注入,xss攻击与csrf攻击的方法_php实例

本文实例讲述了Yii框架防止sql注入,xss攻击与csrf攻击的方法.分享给大家供大家参考,具体如下: PHP中常用到的方法有: /* 防sql注入,xss攻击 (1)*/ function actionClean($str) { $str=trim($str); $str=strip_tags($str); $str=stripslashes($str); $str=addslashes($str); $str=rawurldecode($str); $str=quotemeta($str)

Yii框架防止sql注入,xss攻击与csrf攻击的方法

本文实例讲述了Yii框架防止sql注入,xss攻击与csrf攻击的方法.分享给大家供大家参考,具体如下: PHP中常用到的方法有: /* 防sql注入,xss攻击 (1)*/ function actionClean($str) { $str=trim($str); $str=strip_tags($str); $str=stripslashes($str); $str=addslashes($str); $str=rawurldecode($str); $str=quotemeta($str)

树形菜单上的值从xml文件中读取就只能显示一个树形菜单

问题描述 树形菜单上的值从xml文件中读取就只能显示一个树形菜单 为什么树形菜单在前台设置他的项就可以显示多个树形菜单,但是使树形菜单上的值从xml文件中读取就只能显示一个树形菜单 解决方案 是什么树形菜单,在什么开发环境下使用的呢?是不是xml文件中读取到的数据不全导致的呢?

mfc-MFC单选按钮,一组中未什么只能绑定一个变量,其它控件该怎么操作?

问题描述 MFC单选按钮,一组中未什么只能绑定一个变量,其它控件该怎么操作? 我用的VS2013,单选按钮中,一组按钮只能给Group开头的那个单选控钮定义变量,其它的怎么定义变量? 解决方案 绑定变量后,获取变量值,相减,得到按钮的的索引值.

win7系统中excel导入外部数据出错的解决方法

  在我们平常办公中,最常用的软件是什么?当然是office软件中的word文档.Execl表格和PPT了,在需要用到文字的时候我们选择word,在做数字统计时用execl,演示图片时使用PPT,这三种办公软件是我们常见的.但是最近有win7的用户来反映说,在用excel导入外部数据时老是出错,无法导入成功,这样不仅损坏外部数据,而且也影响我们的办公效率.下面小编来教大家一招,如何在win7系统电脑中导入外部的数据.   win7系统中excel导入外部数据出错的解决方法如下: 1.首先,咱们需

Android中EditText 设置 imeOptions 无效问题的解决方法_Android

有时候我们需要在EditText  输出完之后 需要在键盘出现 右下角变成"Go"或"前往 搜索时:通常我们需要设置Android:imeOptions属性.Android:imeOptions的值有actionGo. actionSend .actionSearch.actionDone等 但是今天我发现设置了无效  那是因为我设置了 android:maxLines="1" 解决方法 就是去掉 android:maxLines="1"

Android中EditText 设置 imeOptions 无效问题的解决方法

有时候我们需要在EditText  输出完之后 需要在键盘出现 右下角变成"Go"或"前往 搜索时:通常我们需要设置Android:imeOptions属性.Android:imeOptions的值有actionGo. actionSend .actionSearch.actionDone等 但是今天我发现设置了无效  那是因为我设置了 android:maxLines="1" 解决方法 就是去掉 android:maxLines="1"

window.location.href中url中数据量太大时的解决方法

 这篇文章主要为大家介绍下window.location.href中url中数据量太大时的解决方法,需要的朋友可以参考下 先说一下今天遇到的问题   一个导出excel的处理,在按钮按下后需要传很大一个数据到后台,刚开始的做法如下: 代码如下: var actionUrlSetData = "****Action!exportDatas.action"+ "?now=" + new Date().getTime(); window.location.href= ac

Yii使用DeleteAll连表删除出现报错问题的解决方法_php实例

本文实例讲述了Yii使用DeleteAll连表删除出现报错问题的解决方法.分享给大家供大家参考,具体如下: 删除数据的时候,经常会遇到连联判断删除数据的条件,今天用Yii 的CDbCriteria生成关连条件.批量删除的时候数据库报错. 页面代码为: $criteria=new CDbCriteria; $criteria->join = ' LEFT JOIN {{positions}} p ON p.zpo_id=t.zpo_id '; $criteria->addCondition(&q