Код: Выделить всё
$ids = array(1, 2, 3, 4, 5);
$sql = 'SELECT login FROM users WHERE id IN (:ids)';
$cmd = Yii::app()->db->createCommand($sql);
$cmd->bindValue(':ids', implode(',' $ids), PDO::PARAM_INT));
$logins = $cmd->queryAll();
Код: Выделить всё
$ids = array(1, 2, 3, 4, 5);
$sql = 'SELECT login FROM users WHERE id IN (:ids)';
$cmd = Yii::app()->db->createCommand($sql);
$cmd->bindValue(':ids', implode(',' $ids), PDO::PARAM_INT));
$logins = $cmd->queryAll();
Да. Даже если поменять на PDO::PARAM_STR, это ничего не даст. Дело в том, что функция implode() возвращает строку и поэтому PDO генерирует условие, как '1, 2, 3, 4, 5', т.е. string (обратите внимание на одинарные кавычки), а должно быть вот так 1, 2, 3, 4, 5. Если не очень понятно, то вот так:lancecoder писал(а):PDO::PARAM_INT
вы уверены?
Да, это я читал. ActiveRecord использовать не хотелось бы. Тут нужен какой-нибудь красивый вариант выхода из подобной ситуации.lancecoder писал(а):ну да проблема, это я так понимаю вы читали http://stackoverflow.com/questions/9203 ... -condition , сделайте через ActiveRecord, как вариант от 1 запроса не убудет
Да, можно сделать. Но как получить 1, 2, 3, 4, 5 и при этом, чтобы это не было string?sergebezborodov писал(а):в построителе запросов можно сделать
->where(array('in', 'id', array(1,2,3,4,5)))
Код: Выделить всё
->where(array('in', 'id', $ids))
а если нужно использовать именно DAO?sergebezborodov писал(а):в случае с ->where(array('in', 'id', array(1,2,3,4,5)))
стринга не будет, а вполне себе кошерный WHERE id IN (1,2,3,4,5)
Код: Выделить всё
$inputs = array(1,2,3,4,5);
$criteria = new CDbCriteria();
$criteria->addInCondition('id',$inputs);
$sql = 'SELECT * FROM obj WHERE '.$criteria->condition;
$command = Yii::app()->db->createCommand($sql);
$results = $command->queryAll(true, $criteria->params);