yii queryAll failes передает параметр
Я прохожу:
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 терпит неудачу?
2 ответа
Несколько раз сталкиваясь с этой проблемой в своих проектах, я придумал следующий обход Yii с использованием CDbCriteria, который немного хакерский, но обеспечивает безопасность сопоставления количества параметров.
Применительно к вашему примеру мой код будет:
$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);
Назначьте идентификаторы массиву:
$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