Подтвердить что ты не робот

Как использовать 'IN (1,2,3)' с findAll?

Мне нужно получить пару студентов из базы данных, и у меня есть их первичные ключи в разделенной запятой строке.

Обычно с использованием SQL это будет что-то вроде:

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

Yii ActiveRecord, кажется, вставляет одну одинарную цитату вокруг связанных параметров в результирующую инструкцию SQL, которая приводит к сбою запроса при использовании привязки параметров.

Это работает, но не использует безопасную привязку параметров.

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

Есть ли способ по-прежнему использовать привязку параметров и получить только пару строк в одном запросе?

4b9b3361

Ответ 1

Вы можете сделать это также следующим образом:

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

и используйте в массиве любые значения, которые вам нужны.

Aleksy

Ответ 2

Вы также можете использовать метод findAllByAttributes:

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