2014-10-17 46 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正在替换参数并给出了关于无效参数数量的错误。希望这可以帮助。