如何在findAll中使用'IN(1,2,3)'?

时间:2011-05-10 08:54:52

标签: activerecord yii

我需要从数据库中获取几个学生,并且我的主键位于以逗号分隔的字符串中。

通常使用SQL就像:

$cleanedStudentIdStringList = "1,2,3,4";
SELECT * FROM Student WHERE id IN ($cleanedStudentIdStringList)

Yii的ActiveRecord似乎在生成的SQL语句中围绕绑定参数插入单引号,这会导致查询在使用参数绑定时失败。

这样可行,但不使用安全参数绑定。

$students = Student::model()->findAll("id IN ({$_POST['studentIds']})");

有没有办法仍然使用参数绑定并在单个查询中只获取几行?

2 个答案:

答案 0 :(得分:31)

你也可以这样做:

$criteria = new CDbCriteria();
$criteria->addInCondition("id", array(1,2,3,4));
$result = Student::model()->findAll($criteria);

并在数组中使用您需要的任何值。

Aleksy

答案 1 :(得分:22)

您也可以使用findAllByAttributes方法:

$a=array(1,2,3,4);
$model = Student::model()->findAllByAttributes(array("id"=>$a));
相关问题