thinkphp 连接sqlserver数据库优化

浏览:5645 发布日期:2016/05/20 分类:技术分享 关键字: thinkphp sqlserver
因为特殊要求需要连接MYSQL数据库的同时还要兼容连接sqlserver数据库进行查询,原本以为查询慢是因为sqlserver的数据量大,直到最近才发现是TP框架底层的原因,经修改后查询速度提高了3-4倍,现在放出,供大家参考
修改 ./ThinkPHP\Extend\Driver\Db\DbSqlsrv.class.php/**
     * Author 淞 2016-05-20
     * 经过测试修改后的查询速度提高3-4倍
     * 因为只用到了查询,所以别的插入,删除,更新,未做修改
     */
    //执行查询  返回数据集
     public function query($str,$bind=array()) {
        $this->initConnect(false);
        if ( !$this->_linkID ) return false;
        //释放前次的查询结果
        if ( $this->queryID ) $this->free();
        N('db_query',1);
        // 记录开始执行时间
        G('queryStartTime');
        $query = sqlsrv_query($this->_linkID,$str);
        return $this->getAll($query);
    }

     //返回数据
    private function getAll($query) {
        //返回数据集
        $result = array();
            while($row = sqlsrv_fetch_array($query,SQLSRV_FETCH_ASSOC)) //SQLSRV_FETCH_ASSOC 去除数字键名
                $result[] = $row;
        $result=$this->toutf8($result);   //数据库为gbk需转码
        return $result;
    }

//另外附上转码函数,给有需要的人用
public function toutf8($Result){
        
        $Row=array();
        $key1=array_keys($Result);
        $key2=array_keys($Result[$key1[0]]);
        foreach ($key2 as $k=>$v){
            $key2[$k]=iconv('gbk', 'utf-8', $v);
        }
        foreach ($Result as $k=>$v){
            $value1=array_values($v);
                $Row[$k]=array_combine($key2, $value1); 
        }
        return $Row;
    }
最佳答案
评论( 相关
后面还有条评论,点击查看>>