为了防止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();
答案 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'
关于无效参数数量的错误。希望这会有所帮助。