Yii绑定IN子句的值

时间:2014-10-17 11:03:09

标签: mysql data-binding yii sql-injection

为了防止Yii In子句中的SQL注入,我们需要在IN子句中绑定参数,但是Yii CDB条件查询在构建时没有这个功能。

$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 个答案:

答案 0 :(得分: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与另一个条件的问题,这是由于addInCondition正在替换params并给予时最终不包括'AND'关于无效参数数量的错误。希望这会有所帮助。