首页 > php教程 > php手册 > 正文

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

php中文网
发布: 2016-06-07 11:40:56
原创
1284人浏览过

哎,因为图片服务器的网址变了,所以让把数据库里所有表所有字段的数据里的旧网址替换成新网址,所以就只能写了这么一个代码,貌似效率还不错,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-&gt;getTables();<br>         foreach($tableList as $k=&gt;$v){<br>             //如果没有数据则直接执行<br>             if($this-&gt;getDataList($v)){<br>                 //获取表字段<br>                 $fieldList=$this-&gt;getFieldInfo($v);<br>                 $list=$this-&gt;db_replace($v,$fieldList);<br>                 dump($list);<br>             }<br>         }<br>     }<br><br>     private function getTables(){<br>         $model=D('Api');<br>         $tableList=$model-&gt;getTables();        //获取所有表名<br>         //处理表名称<br>         foreach($tableList as $k=&gt;$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-&gt;getDbFields();<br>         return $list;<br>     }<br>     //查询表中是否有数据<br>     private function getDataList($table){<br>         $model=D($table);<br>         $list=$model-&gt;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-&gt;db_filter($field);<br>         if(!empty($field)){<br>             foreach($field as $k=&gt;$v){<br>                 $sql="UPDATE `$tableName` SET `$v` = REPLACE ( `$v`, '$this-&gt;old_str', '$this-&gt;new_str' ); ";<br>                 if(M()-&gt;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=&gt;$v){<br>             if(in_array($v,$in)){<br>                 unset($field[$k]);<br>             }<br>         }<br><br>         return $field;<br>     }<br> }欢迎加群:252799167

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

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
热门推荐
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号