无法将数组绑定到CDbCriteria(Yii)

时间:2014-07-07 11:00:27

标签: php mysql sql yii

我想在查询中使用WHERE IN(array)子句。

$criteria = new CDbCriteria;
$criteria->addCondition('id_cty_cmp IN(:ids)');
$criteria->params = array(':ids' => $ids); // binding array

$cmps = Component::model()
            ->with(array('type', 'values'))
            ->findAll($criteria);

像这样,我得到“数组到字符串转换”错误。

当我使用

$criteria->params = array(':ids' => implode(',', $ids));

我什么都没有(空阵列)。

当我不使用绑定时,它可以工作(但显然不是一个好习惯):

$criteria = new CDbCriteria;
$criteria->addCondition('id_cty_cmp IN(' . implode(',', $ids) . ')');

有什么想法吗?

2 个答案:

答案 0 :(得分:2)

好的,这是解决方案。可以帮助未来的googlers。

$criteria = new CDbCriteria;
$criteria->addInCondition('id_cty_cmp', $ids);

答案 1 :(得分:1)

以防万一你想知道

的原因
$criteria->params = array(':ids' => implode(',', $ids));

无法返回任何记录,因为:ids将绑定一个字符串,如下所示:

id_cty_cmp IN('1,2,3')

显然,没有id_cty_cmp与奇怪的值'1,2,3'匹配。

您的解决方案提供的方式如下:

id_cty_cmp IN('1','2','3')