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 相关文章推荐
从C/C++迁移到PHP——判断字符类型的函数
Oct 09 PHP
PHP+Mysql+jQuery实现发布微博程序 jQuery篇
Oct 08 PHP
使用PHP静态变量当缓存的方法
Nov 13 PHP
php使用fgetcsv读取csv文件出现乱码的解决方法
Nov 08 PHP
PHP生成静态HTML页面最简单方法示例
Apr 09 PHP
typecho插件编写教程(五):核心代码
May 28 PHP
php判断用户是否手机访问代码
Jun 08 PHP
Apache PHP MySql安装配置图文教程
Aug 27 PHP
ThinkPHP中类的构造函数_construct()与_initialize()的区别详解
Mar 13 PHP
PHP实现的登录页面信息提示功能示例
Jul 24 PHP
php微信公众号开发之图片回复
Oct 20 PHP
PHP7使用ODBC连接SQL Server2008 R2数据库示例【基于thinkPHP5.1框架】
May 06 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
php foreach 使用&amp;(与运算符)引用赋值要注意的问题
2010/02/16 PHP
ThinkPHP访问不存在的模块跳转到404页面的方法
2014/06/19 PHP
session 加入redis的实现代码
2016/07/15 PHP
javascript函数中的arguments参数
2010/08/01 Javascript
jquery load()在firefox(火狐)下显示不正常的解决方法
2011/04/05 Javascript
如何在JavaScript中实现私有属性的写类方式(二)
2013/12/04 Javascript
js实现文本框中输入文字页面中div层同步获取文本框内容的方法
2015/03/03 Javascript
javascript中利用柯里化函数实现bind方法【推荐】
2016/04/29 Javascript
JavaScript中style.left与offsetLeft的使用及区别详解
2016/06/08 Javascript
针对后台列表table拖拽比较实用的jquery拖动排序
2016/10/10 Javascript
使用jQuery ajaxupload插件实现无刷新上传文件
2017/04/23 jQuery
原生JS实现自定义滚动条效果
2020/10/27 Javascript
jquery+css实现下拉列表功能
2017/09/03 jQuery
解读vue生成的文件目录结构及说明
2017/11/27 Javascript
详解关于React-Router4.0跳转不置顶解决方案
2019/05/10 Javascript
jQuery实现轮播图效果demo
2020/01/11 jQuery
[51:17]Mineski vs Secret 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.22
2019/09/05 DOTA
Python进行数据科学工作的简单入门教程
2015/04/01 Python
Flask的图形化管理界面搭建框架Flask-Admin的使用教程
2016/06/13 Python
python实现微信远程控制电脑
2018/02/22 Python
Python3.x爬虫下载网页图片的实例讲解
2018/05/22 Python
python getpass实现密文实例详解
2019/09/24 Python
Python实现链表反转的方法分析【迭代法与递归法】
2020/02/22 Python
浅析Python 条件控制语句
2020/07/15 Python
CSS3属性box-shadow使用详细教程
2012/01/21 HTML / CSS
html5触摸事件判断滑动方向的实现
2018/06/05 HTML / CSS
中软Java笔试题
2012/11/11 面试题
个人自我鉴定范文
2013/10/04 职场文书
阳光体育活动总结
2014/04/30 职场文书
安全生产月活动总结
2014/05/04 职场文书
教师师德考核自我评价
2014/09/13 职场文书
研究生毕业论文导师评语
2014/12/31 职场文书
2015年政治教研组工作总结
2015/07/22 职场文书
小学五年级班主任工作经验交流材料
2015/11/02 职场文书
Python多线程 Queue 模块常见用法
2021/07/04 Python
通过feDisplacementMap和feImage实现水波特效
2022/04/24 HTML / CSS