2013-10-26 5 views
0

Я пытаюсь выполнить поиск в одном из моих таблиц на основании заданного критерия, как так:CActiveRecord :: FindAll бросает исключение

$id = 1; 
$criteria = new CDbCriteria(); 
$criteria->addCondition("usr_currency=:currency"); 
$currencies = User::model()->findAll($criteria, array(':currency' => $id,));   

Я получаю CDbException:

CDbCommand failed to execute the SQL statement: 
SQLSTATE[HY093]: Invalid parameter number: no parameters were bound. 
The SQL statement executed was: 
    SELECT * FROM `user` `t` 
    WHERE usr_currency=:currency 

Где as, это работает:

$id = 1; 
$criteria = new CDbCriteria(); 
$criteria->addCondition("usr_currency=:currency"); 
$criteria->params = array(':currency' => $id,); 
$comments = User::model()->findAll($criteria);  

Что не так с первым фрагментом кода?

ответ

0

От CActiveRecord::find()

Это используется только, когда первый параметр является строкой (условие запроса). В других случаях используйте параметры CDbCriteria :: params для установки параметров.

+0

А, я вижу. Doc для 'findAll()' ничего не упоминает в этом роде :) –

+0

Из объяснения 'CActiveRecord :: findAll()': находит все активные записи, удовлетворяющие указанному условию. См. Find() для подробного объяснения условий $ condition и $ params. :) – topher

Смежные вопросы