PHP实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)


Posted in PHP onMay 10, 2014

用php代码实现数据库备份可以使网站的管理变得非常便捷,我们可以直接进后台操作就能完成数据库的备份。

关键技术:

1. 首先要得到该数据库中有哪些表,所用函数 mysql_list_tables(),然后可以将获取的所有表名存到一个数组。
2. show create table 表名 可以获取表结构。
3. select * from 表名 取出所有记录,用循环拼接成 insert into... 语句。

实现代码:

<?php header("Content-type:text/html;charset=utf-8");
 //配置信息
 $cfg_dbhost = 'localhost';
 $cfg_dbname = 'ftdm';
 $cfg_dbuser = 'root';
 $cfg_dbpwd = 'root';
 $cfg_db_language = 'utf8';
 $to_file_name = "ftdm.sql";
 // END 配置

 //链接数据库
 $link = mysql_connect($cfg_dbhost,$cfg_dbuser,$cfg_dbpwd);
 mysql_select_db($cfg_dbname);
 //选择编码
 mysql_query("set names ".$cfg_db_language);
 //数据库中有哪些表
 $tables = mysql_list_tables($cfg_dbname);
 //将这些表记录到一个数组
 $tabList = array();
 while($row = mysql_fetch_row($tables)){
  $tabList[] = $row[0];
 }
 echo "运行中,请耐心等待...<br/>";
 $info = "-- ----------------------------\r\n";
 $info .= "-- 日期:".date("Y-m-d H:i:s",time())."\r\n";
 $info .= "-- 仅用于测试和学习,本程序不适合处理超大量数据\r\n";
 $info .= "-- ----------------------------\r\n\r\n";
 file_put_contents($to_file_name,$info,FILE_APPEND);
 //将每个表的表结构导出到文件
 foreach($tabList as $val){
  $sql = "show create table ".$val;
  $res = mysql_query($sql,$link);
  $row = mysql_fetch_array($res);
  $info = "-- ----------------------------\r\n";
  $info .= "-- Table structure for `".$val."`\r\n";
  $info .= "-- ----------------------------\r\n";
  $info .= "DROP TABLE IF EXISTS `".$val."`;\r\n";
  $sqlStr = $info.$row[1].";\r\n\r\n";
  //追加到文件
  file_put_contents($to_file_name,$sqlStr,FILE_APPEND);
  //释放资源
  mysql_free_result($res);
 }
 //将每个表的数据导出到文件
 foreach($tabList as $val){
  $sql = "select * from ".$val;
  $res = mysql_query($sql,$link);
  //如果表中没有数据,则继续下一张表
  if(mysql_num_rows($res)<1) continue;
  //
  $info = "-- ----------------------------\r\n";
  $info .= "-- Records for `".$val."`\r\n";
  $info .= "-- ----------------------------\r\n";
  file_put_contents($to_file_name,$info,FILE_APPEND);
  //读取数据
  while($row = mysql_fetch_row($res)){
   $sqlStr = "INSERT INTO `".$val."` VALUES (";
   foreach($row as $zd){
    $sqlStr .= "'".$zd."', ";
   }
   //去掉最后一个逗号和空格
   $sqlStr = substr($sqlStr,0,strlen($sqlStr)-2);
   $sqlStr .= ");\r\n";
   file_put_contents($to_file_name,$sqlStr,FILE_APPEND);
  }
  //释放资源
  mysql_free_result($res);
  file_put_contents($to_file_name,"\r\n",FILE_APPEND);
 }
 echo "OK!";
?>
PHP 相关文章推荐
PHP4实际应用经验篇(3)
Oct 09 PHP
定制404错误页面,并发信给管理员的程序
Oct 09 PHP
由php的call_user_func传reference引发的思考
Jul 23 PHP
PHP 字符串长度判断效率更高的方法
Mar 02 PHP
codeigniter上传图片不能正确识别图片类型问题解决方法
Jul 25 PHP
PHP中大于2038年时间戳的问题处理方案
Mar 03 PHP
php编程每天必学之表单验证
Mar 01 PHP
Yii2.0 模态弹出框+ajax提交表单
May 22 PHP
PHP通过微信跳转的Code参数获取用户的openid(关键代码)
Jul 06 PHP
php实现图片以base64显示的方法
Oct 13 PHP
PHP bin2hex()函数基础实例讲解
Feb 11 PHP
php设计模式之建造器模式分析【星际争霸游戏案例】
Jan 23 PHP
php使用mkdir创建多级目录入门例子
May 10 #PHP
一个简单的PHP验证码实现代码
May 10 #PHP
php生成随机密码自定义函数代码(简单快速)
May 10 #PHP
php实现按文件名搜索文件的远程文件查找器
May 10 #PHP
thinkphp实现面包屑导航(当前位置)例子分享
May 10 #PHP
php把数据表导出为Excel表的最简单、最快的方法(不用插件)
May 10 #PHP
php实现zip压缩文件解压缩代码分享(简单易懂)
May 10 #PHP
You might like
采用header定义为文件然后readfile下载(隐藏下载地址)
2014/01/31 PHP
php使用多个进程同时控制文件读写示例
2014/02/28 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
Prototype1.5 rc2版指南最后一篇之Position
2007/01/10 Javascript
javascript replace方法与正则表达式
2008/02/19 Javascript
jQuery 性能优化手册 推荐
2010/02/23 Javascript
IE无法设置短域名下Cookie
2010/09/23 Javascript
javascript 学习笔记(八)javascript对象
2011/04/12 Javascript
Jquery实现页面加载时弹出对话框代码
2013/04/19 Javascript
javascript浏览器兼容教程之事件处理
2014/06/09 Javascript
javascript获取四位数字或者字母的随机数
2015/01/09 Javascript
jQuery插件multiScroll实现全屏鼠标滚动切换页面特效
2015/04/12 Javascript
基于Arcgis for javascript实现百度地图ABCD marker的效果
2015/09/12 Javascript
js微信分享API
2020/10/11 Javascript
AngularJS实现给动态生成的元素绑定事件的方法
2016/12/14 Javascript
JavaScript省市级联下拉菜单实例
2017/02/14 Javascript
jquery实现图片跟随鼠标的实例
2017/10/17 jQuery
JavaScript中Dom操作实例详解
2019/07/08 Javascript
解决Django的request.POST获取不到内容的问题
2018/05/28 Python
对python字典过滤条件的实例详解
2019/01/22 Python
Python Django中的STATIC_URL 设置和使用方式
2020/03/27 Python
解决reload(sys)后print失效的问题
2020/04/25 Python
TensorFlow Autodiff自动微分详解
2020/07/06 Python
传统HTML页面实现模块化加载的方法
2018/10/15 HTML / CSS
html2canvas截图空白问题的解决
2020/03/24 HTML / CSS
台湾饭店和机票预订网站:Expedia台湾
2016/08/05 全球购物
Hotels.com南非:酒店预订
2017/11/02 全球购物
Intersport西班牙:在线体育商店
2019/11/06 全球购物
房屋租赁协议书
2014/04/10 职场文书
模范教师事迹材料
2014/12/16 职场文书
志愿者个人总结
2015/03/03 职场文书
合同审查法律意见书
2015/06/04 职场文书
幼儿园保育员随笔
2015/08/14 职场文书
2015年小学语文教师工作总结
2015/10/23 职场文书
2016孝老爱亲模范事迹材料
2016/02/26 职场文书
浅谈Redis 中的过期删除策略和内存淘汰机制
2022/04/03 Redis