Yii:CDbCriteria不会用提供的值替换占位符

时间:2013-07-30 16:40:08

标签: php sql yii

我有以下代码:

$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_idvalue不会与提供的值进行比较,但不会在函数中传递。以下是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)

为什么我会看到占位符:ycp0ycp1而不是我设置的值?谢谢!

1 个答案:

答案 0 :(得分:3)

因为占位符被数据库引擎替换为实际值,甚至Yii本身也根本看不到查询的“最终”形式。

但是,有一个选项可以将参数值与查询并排记录:将连接的enableParamLogging属性设置为true,并将值记录为相同的消息(它继续“绑定...”)。