从标准参数中删除引号

时间:2014-11-25 05:29:38

标签: php yii

我正在使用Yii 1.1.15并且正在为我的数据提供者添加一个标准

$search_condition[] = 'd.test IN (:pTEST)';
$search_params[':pTEST'] = $_GET[$key];

    $dataProvider=new CActiveDataProvider('MODELNAME', 
                    array(
                        'criteria' => array(
                            'condition'=>$_search_conditions, 
                            'params'=>$search_params,
                        ),
    ));

生成的查询是

SELECT COUNT(*) FROM `TABLE` `s` 
WHERE (s.id IN (:pTEST)). Bound with :pTEST='6,50'

当我调用此函数$dataProvider->getTotalItemCount());

时,我在视图中给出0结果

但是当我改变我的参数时。它有效。

$search_condition[] = 'd.test IN ('.$_GET[$key].')';

这不会受到mysql注入的攻击吗?如果是这样,我如何使用yii的参数?或者我应该添加mysql_real_escape_string?就个人而言,如果可能,我宁愿使用Yii的约束。

1 个答案:

答案 0 :(得分:0)

您在yii中有一个CDBCriteria类可以帮助您构建查询

$values = explode(",",$_GET[$key])
$criteria = new CDBCriteria();
$criteria->addInCondition('test',$values)

$dataProvider=new CActiveDataProvider('MODELNAME', 
                    array(
                        'criteria' => $criteria,
    ));

这将为您提供所需的输出