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 相关文章推荐
删除无限级目录与文件代码共享
Jul 12 PHP
操作Oracle的php类
Oct 09 PHP
PHP DataGrid 实现代码
Aug 12 PHP
php更改目录及子目录下所有的文件后缀扩展名的代码
Oct 12 PHP
php启用zlib压缩文件的配置方法
Jun 12 PHP
PHP SOCKET编程详解
May 22 PHP
PHP输出多个元素的排列或组合的方法
Mar 14 PHP
三个思路解决laravel上传文件报错:413 Request Entity Too Large问题
Nov 13 PHP
PHP获取HTTP body内容的方法
Dec 31 PHP
PHP实现的用户注册表单验证功能简单示例
Feb 25 PHP
PHP中Session ID的实现原理实例分析
Aug 17 PHP
Vagrant(WSL)+PHPStorm+Xdebu 断点调试环境搭建
Dec 13 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下将图片以二进制存入mysql数据库中并显示的实现代码
2010/05/27 PHP
php使用百度翻译api示例分享
2014/01/31 PHP
php 模拟 asp.net webFrom 按钮提交事件实例
2014/10/13 PHP
详解php中的implements 使用
2017/06/13 PHP
利用PHP获取汉字首字母并且分组排序详解
2017/10/22 PHP
javascript是怎么继承的介绍
2012/01/05 Javascript
js控制表单不能输入空格的小例子
2013/11/20 Javascript
node.js中的fs.rename方法使用说明
2014/12/16 Javascript
自定义函数实现IE7与IE8不兼容js中trim函数的问题
2015/02/03 Javascript
使用plupload自定义参数实现多文件上传
2016/07/19 Javascript
nodejs 图解express+supervisor+ejs的用法(推荐)
2017/09/08 NodeJs
JS库particles.js创建超炫背景粒子插件(附源码下载)
2017/09/13 Javascript
JavaScript创建对象的常用方式总结
2018/08/10 Javascript
vue代码分割的实现(codesplit)
2018/11/13 Javascript
vue使用websocket的方法实例分析
2019/06/22 Javascript
vue实现短信验证码输入框
2020/04/17 Javascript
JavaScript array常用方法代码实例详解
2020/09/02 Javascript
Python socket编程实例详解
2015/05/27 Python
python操作MySQL 模拟简单银行转账操作
2017/09/27 Python
Python通过命令开启http.server服务器的方法
2017/11/04 Python
python中urlparse模块介绍与使用示例
2017/11/19 Python
详解Django之admin组件的使用和源码剖析
2018/05/04 Python
分享vim python缩进等一些配置
2018/07/02 Python
python3射线法判断点是否在多边形内
2019/06/28 Python
python 实现在一张图中绘制一个小的子图方法
2019/07/07 Python
详解Django将秒转换为xx天xx时xx分
2019/09/27 Python
opencv3/C++实现视频读取、视频写入
2019/12/11 Python
基于Numba提高python运行效率过程解析
2020/03/02 Python
Data URI scheme详解和使用实例及图片base64编码实现方法
2014/05/08 HTML / CSS
小区消防演习方案
2014/02/21 职场文书
政风行风建设整改方案
2014/10/27 职场文书
2015年妇幼保健工作总结
2015/05/19 职场文书
关于食品安全的演讲稿范文(三篇)
2019/10/21 职场文书
详解MySQL主从复制及读写分离
2021/05/07 MySQL
Vue OpenLayer 为地图绘制风场效果
2022/04/24 Vue.js
彻底弄懂Python中的回调函数(callback)
2022/06/25 Python