ThinkPHP 在select查询时 无法使用中文字段原因

来源:互联网 发布:横截面数据eview 编辑:程序博客网 时间:2024/06/03 22:51

在ThinkPHP/Lib/Core/Db.class.php 文件下

protected function parseWhere($where) {        $whereStr = '';        if(is_string($where)) {            // 直接使用字符串条件            $whereStr = $where;        }else{ // 使用数组表达式            $operate  = isset($where['_logic'])?strtoupper($where['_logic']):'';            if(in_array($operate,array('AND','OR','XOR'))){                // 定义逻辑运算规则 例如 OR XOR AND NOT                $operate    =   ' '.$operate.' ';                unset($where['_logic']);            }else{                // 默认进行 AND 运算                $operate    =   ' AND ';            }            foreach ($where as $key=>$val){                $whereStr .= '( ';                if(is_numeric($key)){                    $key  = '_complex';                }                                    if(0===strpos($key,'_')) {                    // 解析特殊条件表达式                    $whereStr   .= $this->parseThinkWhere($key,$val);                }else{                    // 查询字段的安全过滤                   /* if(!preg_match('/^[A-Z_\|\&\-.a-z0-9\(\)\,]+$/',trim($key))){                        throw_exception(L('_EXPRESS_ERROR_').':'.$key);                    }*/                    // 多条件支持                    $multi  = is_array($val) &&  isset($val['_multi']);                    $key    = trim($key);                    if(strpos($key,'|')) { // 支持 name|title|nickname 方式定义查询字段                        $array =  explode('|',$key);                        $str   =  array();                        foreach ($array as $m=>$k){                            $v =  $multi?$val[$m]:$val;                            $str[]   = '('.$this->parseWhereItem($this->parseKey($k),$v).')';                        }                        $whereStr .= implode(' OR ',$str);                    }elseif(strpos($key,'&')){                        $array =  explode('&',$key);                        $str   =  array();                        foreach ($array as $m=>$k){                            $v =  $multi?$val[$m]:$val;                            $str[]   = '('.$this->parseWhereItem($this->parseKey($k),$v).')';                        }                        $whereStr .= implode(' AND ',$str);                    }else{                        $whereStr .= $this->parseWhereItem($this->parseKey($key),$val);                    }                }                $whereStr .= ' )'.$operate;            }            $whereStr = substr($whereStr,0,-strlen($operate));        }        return empty($whereStr)?'':' WHERE '.$whereStr;    }

在这个函数中  有一个正则表达式的判断  表示只能使用英文字段 
/* if(!preg_match('/^[A-Z_\|\&\-.a-z0-9\(\)\,]+$/',trim($key))){                        throw_exception(L('_EXPRESS_ERROR_').':'.$key);                    }*/

这里我暂时把这段话注释了  于是就可以查到  等以后懂了正则表达式后   可以自己来实现一下

0 0
原创粉丝点击