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']是好的。