2013-07-30 2 views
0

У меня есть следующий код:Yii: CDbCriteria не заменяет заполнитель значением параметра

$criteria=new CDbCriteria; 
$criteria->condition = ' action_id 
IN(SELECT action_id FROM action_type WHERE action_name = \'EnableGame\') '; 
$criteria->compare('task_id','= '.$taskData->task_id, false, 'AND'); 
$criteria->compare('value', '= '.$gameData->game_id, false, 'AND'); 
$enablingActions = TaskActions::model()->findAll($criteria); 

compare В метод task_id и value не по сравнению с предоставленными значениями, но, как это не передается в функцию. Вот как Yii переводит SQL запроса кода выше:

Querying SQL: SELECT * FROM "task_actions" "t" 
WHERE 
    (( 
    action_id IN(SELECT action_id FROM action_type WHERE action_name = 'EnableGame' 
)) 
AND (task_id=:ycp0)) 
AND (value=:ycp1) 

Почему я вижу заполнители :ycp0 и ycp1 вместо значения я установил? Спасибо!

ответ

3

Поскольку заполнители заменяются фактическими значениями в базе данных, и даже сам Yii не видит «окончательную» форму запроса вообще.

Однако, есть вариант, который позволяет регистрацию значений параметров бок о бок с запросом: набор атрибутов для соединения, enableParamLogging к true и значения будут регистрироваться в рамках одного и того же сообщения (оно продолжается «Bound с ...").

+0

Спасибо @ Jon. Позвольте мне еще раз подумать. Я хочу заменить '$ criteria-> compare ('task_id', '='. $ TaskData-> task_id, false, 'AND');' с чем-то вроде '$ criteria-> compare ('task_id', ': task_id ', false,' AND '); $ criteria-> params = array (': task_id', $ taskData-> task_id); 'Это не работает в моем случае, как вы предполагаете. В журнале указано: Недопустимый номер параметра: параметр не определен. Оператор SQL выполнен: SELECT * FROM «task_actions» «t» WHERE ((action_id IN (SELECT action_id FROM action_type WHERE action_name = 'EnableGame')) AND (task_id =: ycp0)) AND (значение =: ycp1). – 0xC0DEGURU

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