2013-07-30 28 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_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,而不是我設置的值?謝謝!

回答

3

由於佔位符被數據庫引擎的實際值替換,甚至Yii本身根本沒有看到「最終」形式的查詢。

然而,存在能夠使參數值側由端與所述查詢的日誌記錄的選項:設置連接的enableParamLogging屬性true和值將被記錄爲相同的消息的一部分(它繼續「綁定與......「)。

+0

謝謝@Jon。讓我再問你一個想法。我想替換'$ criteria-> compare('task_id','='。$ taskData-> task_id,false,'AND');'像'$ criteria-> compare('task_id',':task_id ',假'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(value =:ycp1)。 – 0xC0DEGURU