Heim  >  Artikel  >  php教程  >  【奇葩的需求】批量操作整个数据库

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

WBOY
WBOYOriginal
2016-06-07 11:40:561015Durchsuche

哎,因为图片服务器的网址变了,所以让把数据库里所有表所有字段的数据里的旧网址替换成新网址,所以就只能写了这么一个代码,貌似效率还不错,20多W的数据量,只用了13秒,好的代码不需要太多的文字来解释
http://a3147972.blog.51cto.com/2366547/1555169
<?php <br /> class TestAction extends Action{<br>     private $old_str='';<br>     private $new_str=''<br>     function index(){<br>         set_time_limit(0);<br>         $tableList=$this->getTables();<br>         foreach($tableList as $k=>$v){<br>             //如果没有数据则直接执行<br>             if($this->getDataList($v)){<br>                 //获取表字段<br>                 $fieldList=$this->getFieldInfo($v);<br>                 $list=$this->db_replace($v,$fieldList);<br>                 dump($list);<br>             }<br>         }<br>     }<br> <br>     private function getTables(){<br>         $model=D('Api');<br>         $tableList=$model->getTables();        //获取所有表名<br>         //处理表名称<br>         foreach($tableList as $k=>$v){<br>             if(substr($v,0,strlen(C('DB_PREFIX')))!==C('DB_PREFIX'))<br>                 unset($tableList[$k]);<br>             else<br>                 $tableList[$k]=str_replace(C('DB_PREFIX'),'',$v);<br>         }<br>         return $tableList;<br>     }<br>     //获取字段信息<br>     private function getFieldInfo($table){<br>         $model=D($table);<br>         $list=$model->getDbFields();<br>         return $list;<br>     }<br>     //查询表中是否有数据<br>     private function getDataList($table){<br>         $model=D($table);<br>         $list=$model->select();<br>         if($list)<br>             return true;<br>         else<br>             return false;<br>     }<br>     //执行替换<br>     private function db_replace($table,$field){<br>         $tableName=C('DB_PREFIX').$table;<br>         $field=$this->db_filter($field);<br>         if(!empty($field)){<br>             foreach($field as $k=>$v){<br>                 $sql="UPDATE `$tableName` SET `$v` = REPLACE ( `$v`, '$this->old_str', '$this->new_str' ); ";<br>                 if(M()->execute($sql))<br>                     $ok[]='替换完成,替换表为.'.$tableName.'|替换字段为'.$v.'<br>';<br>             }<br>         }<br>         return $ok;<br>     }<br> <br>     //字段过滤<br>     private function db_filter($field){<br>         $in=array('id','name','title','token','wecha_id','pid','level','uid');<br>         foreach($field as $k=>$v){<br>             if(in_array($v,$in)){<br>                 unset($field[$k]);<br>             }<br>         }<br> <br>         return $field;<br>     }<br> }欢迎加群:252799167

AD:真正免费,域名+虚机+企业邮箱=0元

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn