getField查询多字段无法缓存

浏览:728 发布日期:2014/09/12
3.2.2 - 严重 - 未处理
文件:Think/Library/Think/Model.class.php
方法:getField
问题:查询多字段缓存无效
分析:在查询记录后,原代码是将所查询的第一个字段作为key,当出现以下情况时,缓存会被覆盖M("JBm")->cache("bm")->getField("id,bm");
M("JBm")->cache("bm")->getField("id,bm");
// 出现以上情况时,缓存的key都为id,以为缓存被覆盖
具体代码:if(!isset($options['limit'])){
                $options['limit']   =   is_numeric($sepa)?$sepa:'';
            }
            $resultSet          =   $this->db->select($options);
            if(!empty($resultSet)) {
                $_field         =   explode(',', $field);
                $field          =   array_keys($resultSet[0]);
                $key            =   array_shift($field);
                $key2           =   array_shift($field);
                $cols           =   array();
                $count          =   count($_field);
                foreach ($resultSet as $result){
                    $name   =  $result[$key];
                    if(2==$count) {
                        $cols[$name]   =  $result[$key2];
                    }else{
                        $cols[$name]   =  is_string($sepa)?implode($sepa,array_slice($result,1)):$result;
                    }
                }
                if(isset($cache)){
                    // 原代码
                    //S($key,$cols,$cache);
                    
                    // 林博-2014.9.12-原代码中的key是字段列表中的第一个字段,如果出现以下情况就不能缓存
                    // M("JBm")->cache("bm")->getField("id,bm");
                    // M("JBm")->cache("bm")->getField("id,bm");
                    // 出现以上情况时,缓存的key都为id,所以缓存被覆盖
                    S($cache['key'],$cols,$cache);// 新
                }
                return $cols;
            }
评论(
后面还有条评论,点击查看>>