2011-05-10 57 views
17

我需要從數據庫中獲得幾個學生,並且我的主鍵在逗號分隔的字符串中。如何在findAll中使用'IN(1,2,3)'?

通常使用SQL它會是這樣的:

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

Yii中的ActiveRecord的似乎插入開往各地在最終的SQL語句引起查詢失敗使用參數綁定的參數時,一個單引號。

這有效,但不使用安全參數綁定。

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

有沒有辦法仍然使用參數綁定,並得到一個單一的查詢只有幾行?

回答

29

你可以做到這一點也這樣:

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

和陣列使用任何你需要的值。

Aleksy

21

您可以使用findAllByAttributes方法也:

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