您好,欢迎访问一九零五行业门户网

【奇葩的需求】批量操作整个数据库

哎,因为图片服务器的网址变了,所以让把数据库里所有表所有字段的数据里的旧网址替换成新网址,所以就只能写了这么一个代码,貌似效率还不错,20多w的数据量,只用了13秒,好的代码不需要太多的文字来解释
http://a3147972.blog.51cto.com/2366547/1555169
gettables();
        foreach($tablelist as $k=>$v){
            //如果没有数据则直接执行
            if($this->getdatalist($v)){
                //获取表字段
                $fieldlist=$this->getfieldinfo($v);
                $list=$this->db_replace($v,$fieldlist);
                dump($list);
            }
        }
    }
private function gettables(){
        $model=d('api');
        $tablelist=$model->gettables();        //获取所有表名
        //处理表名称
        foreach($tablelist as $k=>$v){
            if(substr($v,0,strlen(c('db_prefix')))!==c('db_prefix'))
                unset($tablelist[$k]);
            else
                $tablelist[$k]=str_replace(c('db_prefix'),'',$v);
        }
        return $tablelist;
    }
    //获取字段信息
    private function getfieldinfo($table){
        $model=d($table);
        $list=$model->getdbfields();
        return $list;
    }
    //查询表中是否有数据
    private function getdatalist($table){
        $model=d($table);
        $list=$model->select();
        if($list)
            return true;
        else
            return false;
    }
    //执行替换
    private function db_replace($table,$field){
        $tablename=c('db_prefix').$table;
        $field=$this->db_filter($field);
        if(!empty($field)){
            foreach($field as $k=>$v){
                $sql=update `$tablename` set `$v` = replace ( `$v`, '$this->old_str', '$this->new_str' ); ;
                if(m()->execute($sql))
                    $ok[]='替换完成,替换表为.'.$tablename.'|替换字段为'.$v.'
';
            }
        }
        return $ok;
    }
//字段过滤
    private function db_filter($field){
        $in=array('id','name','title','token','wecha_id','pid','level','uid');
        foreach($field as $k=>$v){
            if(in_array($v,$in)){
                unset($field[$k]);
            }
        }
return $field;
    }
}欢迎加群:252799167
ad:真正免费,域名+虚机+企业邮箱=0元
其它类似信息

推荐信息