2014-10-17 39 views
0

爲了防止Yii In子句中的SQL注入,我們需要綁定IN子句中的參數,但是Yii CDB標準查詢在構建時不具有此功能。Yii爲IN子句綁定值

$products_ids = array(234,100,405,506); 

陣列映射用於結合

$in_query = implode(',', array_fill(0, count($products_ids), '?')); 

準備commadn對象選擇

$command = Yii::app()->db->createCommand() 
       ->select('product_id, product_name, product_image, product_price') 
       ->from('products') 
       ->where('product_id IN(' . $in_query . ')'); 

綁定的參數

foreach ($products_ids as $k => $product_id){ 
    $command->bindValue(($k+1),$product_id,PDO::PARAM_INT); 
} 

得到的結果

$products = $command->queryAll(); 

回答

1

這裏是yii條件的一個例子。我已經使用這個今天:

$orderIds = array(1,2); 
$criteria = new CDbCriteria(); 
$criteria->addInCondition("order_id", $orderIds,'AND'); 
$criteria->condition = 'product_id = :product_id'; 
$criteria->params = array(':product_id'=>$product->id); 
$orderItems=new CActiveDataProvider('OrderItems', array(
                'criteria'=>$criteria, 
                'pagination'=>array(
                 'pageSize'=>20, 
                 ), 
             )); 

我問這個問題之前我自己,在這裏看到: Yii using a variable with an IN condition

我已經把這個作爲一個答案,而不是評論,因爲我也有使用addInCondition問題與另一條件也是,這是由於在最後沒有包括'AND',因爲addInCondition正在替換參數並給出了關於無效參數數量的錯誤。希望這可以幫助。