Php yii查询失败通过参数

Php yii查询失败通过参数,php,mysql,yii,dao,Php,Mysql,Yii,Dao,我路过: Yii::app()->db->createCommand($query)->queryAll(true,array(':bizid'=>$params)); 查询: SELECT DISTINCT(BI.item_name) FROM items BI WHERE BI.b_id IN (:bizid) ORDER BY BI.item_name ASC 查询无法找到结果,但此查询将获得以下结果: SELECT DISTINCT(BI.item_

我路过:

Yii::app()->db->createCommand($query)->queryAll(true,array(':bizid'=>$params));
查询:

 SELECT DISTINCT(BI.item_name)
 FROM items BI 
 WHERE BI.b_id IN (:bizid) ORDER BY BI.item_name ASC 
查询无法找到结果,但此查询将获得以下结果:

SELECT DISTINCT(BI.item_name) as i_name FROM blacklist_items BI WHERE BI.business_id IN   (165,664,842,866,1234,3007,3030,3031,3032) ORDER BY BI.item_name ASC

为什么queryAll失败?

将ID分配给数组:

$ids = [165,664,842,866,1234,3007,3030,3031,3032];
查询应为:

$query = "SELECT DISTINCT(BI.item_name)"
 . " FROM items BI"
 . " WHERE BI.b_id IN (" . implode(',', $ids) . ") ORDER BY BI.item_name ASC 

在我的项目中多次遇到这个问题后,我提出了以下使用CDbCriteria的Yii解决方案,这有点粗糙,但提供了参数计数匹配的安全性

当应用于您的示例时,我的代码是:

$business_ids = array(1,2,3,4,5);
$criteria = new CDbCriteria();
$criteria->addInCondition('business_id',$business_ids);

$sql = 'SELECT DISTINCT(item_name) 
          FROM items 
         WHERE '.$criteria->condition.'
      ORDER BY item_name ASC';

$command = Yii::app()->db->createCommand($sql);
$results = $command->queryColumn($criteria->params);

每个可能的值都需要一个单独的占位符:这是因为未能为结果创建提议者索引。它不喜欢像$results['DISTINCT(BI.item_name')这样的东西。然而,$results['i_name']是好的。