3.2.3数据库操作使用数组条件的异常问题

浏览:428 发布日期:2015/09/15
3.2.3 - 严重 - 未处理
采用版本是3.2.3,大概在今年6月份下载的
先说问题,首先:M('User')->where('id=1')->select();这个查询返回id为1的user数据,是正常的
然后根据手册里的说明,用下面的用法:$map['id']=1;
M('User')->where($map)->select();
结果返回了所有的user数据。

查看系统的类文件:Model.class.php,发现函数 protected function _parseOptions($options=array()) 有一段下面的代码foreach ($options['where'] as $key=>$val){
    $key            =   trim($key);
    if(in_array($key,$fields,true)){
        if(is_scalar($val)) {
            $this->_parseType($options['where'],$key);
        }
    }elseif(!is_numeric($key) && '_' != substr($key,0,1) && false === strpos($key,'.') && false === strpos($key,'(') && false === strpos($key,'|') && false === strpos($key,'&')){
        if(!empty($this->options['strict'])){
            E(L('_ERROR_QUERY_EXPRESS_').':['.$key.'=>'.$val.']');
        } 
        unset($options['where'][$key]);
    }
}
里面主要是这句:unset($options['where'][$key]);如果注释掉,那么查询正常,
我的理解:
如果
key不是数字
key不是以'_'开头
key不是以'.'开头
key不是以'('开头
key不是以'|'开头
key不是以'&'开头
同时符合上面的条件则unset这个where条件,不太明白为什么要这样
我认为应该是:如果key是数字或key以'_.(|&'这些字符开头,则unset($options['where'][$key]);比较合适
评论(
后面还有条评论,点击查看>>