php将mysql数据库整库导出生成sql文件的具体实现


Posted in PHP onJanuary 08, 2014

由网上搜到,有更改。

文件名:db_backup.php

源代码如下:

<?php 
ini_set("max_execution_time", "180");//避免数据量过大,导出不全的情况出现。 /* 
程序功能:mysql数据库备份功能 
作者:唐小刚 
说明: 
本程序主要是从mysqladmin中提取出来,并作出一定的调整,希望对大家在用php编程时备份数据有一定帮助. 
如果不要备份结构:请屏掉这句:echo get_table_structure($dbname, $table, $crlf).";$crlf$crlf"; 
如果不要备份内容:请屏掉这句:echo get_table_content($dbname, $table, $crlf); 
修改者:何锦盛 
修改时间:2009/11/7 
修改内容:新增函数get_table_structure,注释掉了函数get_table_def,目的是获得更丰富的建表时的细节(如:ENGINE=InnoDB AUTO_INCREMENT=80 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='商品信息变更信息') 
*/ 
$host="";//数据库地址 
$dbname="";//这里配置数据库名 
$username="";//用户名 
$passw="";//这里配置密码 
$filename=date("Y-m-d_H-i-s")."-".$dbname.".sql"; 
header("Content-disposition:filename=".$filename);//所保存的文件名 
header("Content-type:application/octetstream"); 
header("Pragma:no-cache"); 
header("Expires:0"); 
//备份数据 
$i = 0; 
$crlf="\r\n"; 
global $dbconn; 
$dbconn = mysql_connect($host,$username,$passw]);//数据库主机,用户名,密码 
$db = mysql_select_db($dbname,$dbconn); 
mysql_query("SET NAMES 'utf8'"); 
$tables =mysql_list_tables($dbname,$dbconn); 
$num_tables = @mysql_numrows($tables); 
print "-- filename=".$filename; 
while($i < $num_tables) 
{ 
$table=mysql_tablename($tables,$i); 
print $crlf; 
echo get_table_structure($dbname, $table, $crlf).";$crlf$crlf"; 
//echo get_table_def($dbname, $table, $crlf).";$crlf$crlf"; 
echo get_table_content($dbname, $table, $crlf); 
$i++; 
} 
/*新增的获得详细表结构*/ 
function get_table_structure($db,$table,$crlf) 
{ 
global $drop; 
$schema_create = ""; 
if(!empty($drop)){ $schema_create .= "DROP TABLE IF EXISTS `$table`;$crlf";} 
$result =mysql_db_query($db, "SHOW CREATE TABLE $table"); 
$row=mysql_fetch_array($result); 
$schema_create .= $crlf."-- ".$row[0].$crlf; 
$schema_create .= $row[1].$crlf; 
Return $schema_create; 
} 
/* 
//原来别人的取得数据库结构,但不完整 
function get_table_def($db,$table,$crlf) 
{ 
global $drop; 
$schema_create = ""; 
if(!empty($drop)) 
$schema_create .= "DROP TABLE IF EXISTS `$table`;$crlf"; 
$schema_create .= "CREATE TABLE `$table` ($crlf"; 
$result = mysql_db_query($db, "SHOW full FIELDS FROM $table"); 
while($row = mysql_fetch_array($result)) 
{ 
$schema_create .= " `$row[Field]` $row[Type]"; 
if(isset($row["Default"]) && (!empty($row["Default"]) || $row["Default"] == "0")) 
$schema_create .= " DEFAULT '$row[Default]'"; 
if($row["Null"] != "YES") 
$schema_create .= " NOT NULL"; 
if($row["Extra"] != "") 
$schema_create .= " $row[Extra]"; 
if($row["Comment"] != "") 
$schema_create .= " Comment '$row[Comment]'"; 
$schema_create .= ",$crlf"; 
} 
$schema_create = ereg_replace(",".$crlf."$", "", $schema_create); 
$result = mysql_db_query($db, "SHOW KEYS FROM $table"); 
while($row = mysql_fetch_array($result)) 
{ 
$kname=$row['Key_name']; 
if(($kname != "PRIMARY") && ($row['Non_unique'] == 0)) 
$kname="UNIQUE|$kname"; 
if(!isset($index[$kname])) 
$index[$kname] = array(); 
$index[$kname][] = $row['Column_name']; 
} 
while(list($x,$columns) = @each($index)) 
{ 
$schema_create .= ",$crlf"; 
if($x == "PRIMARY") 
$schema_create .= " PRIMARY KEY (".implode($columns,", ") . ")"; 
elseif (substr($x,0,6) == "UNIQUE") 
$schema_create .= " UNIQUE ".substr($x,7)." (" . implode($columns, ", ") . ")"; 
else 
$schema_create .= " KEY $x (" . implode($columns, ", ") . ")"; 
} 
$schema_create .= "$crlf)"; 
return (stripslashes($schema_create)); 
} 
*/ 
//获得表内容 
function get_table_content($db, $table, $crlf) 
{ 
$schema_create = ""; 
$temp = ""; 
$result = mysql_db_query($db, "SELECT * FROM $table"); 
$i = 0; 
while($row = mysql_fetch_row($result)) 
{ 
$schema_insert = "INSERT INTO `$table` VALUES ("; 
for($j=0; $j<mysql_num_fields($result);$j++) 
{ 
if(!isset($row[$j])) 
$schema_insert .= " NULL,"; 
elseif($row[$j] != "") 
$schema_insert .= " '".addslashes($row[$j])."',"; 
else 
$schema_insert .= " '',"; 
} 
$schema_insert = ereg_replace(",$", "",$schema_insert); 
$schema_insert .= ");$crlf"; 
$temp = $temp.$schema_insert ; 
$i++; 
} 
return $temp; 
} 
?>
PHP 相关文章推荐
PHP substr 截取字符串出现乱码问题解决方法[utf8与gb2312]
Dec 16 PHP
php explode函数实例代码
Feb 27 PHP
php牛逼的面试题分享
Jan 18 PHP
php cli 小技巧
Jun 03 PHP
php调整gif动画图片尺寸示例代码分享
Dec 05 PHP
PHP防范SQL注入的具体方法详解(测试通过)
May 09 PHP
php数组转成json格式的方法
Mar 09 PHP
php实现粘贴截图并完成上传功能
May 17 PHP
php基于session实现数据库交互的类实例
Aug 03 PHP
Yii2框架制作RESTful风格的API快速入门教程
Nov 08 PHP
PHP正则表达式匹配替换与分割功能实例浅析
Feb 04 PHP
PHP的PDO预处理语句与存储过程
Jan 27 PHP
PHP修改session_id示例代码
Jan 08 #PHP
让PHP显示Facebook的粉丝数量方法
Jan 08 #PHP
利用浏览器的Javascript控制台调试PHP程序
Jan 08 #PHP
php获取从百度搜索进入网站的关键词的详细代码
Jan 08 #PHP
PHP IE中下载附件问题解决方法
Jan 07 #PHP
迅速确定php多维数组的深度的方法
Jan 07 #PHP
ini_set的用法介绍
Jan 07 #PHP
You might like
造势之举?韩国总统候选人发布《星际争霸》地图
2017/04/22 星际争霸
php minixml详解
2008/07/19 PHP
php图片的二进制转换实现方法
2014/12/15 PHP
php+html5实现无刷新图片上传教程
2016/01/22 PHP
laravel与thinkphp之间的区别与优缺点
2021/03/02 PHP
NodeJS Web应用监听sock文件实例
2015/02/18 NodeJs
javascript简单实现类似QQ头像弹出效果的方法
2015/08/03 Javascript
CSS图片响应式 垂直水平居中
2015/08/14 Javascript
Angularjs 滚动加载更多数据
2016/03/17 Javascript
JS中动态创建元素的三种方法总结(推荐)
2016/10/20 Javascript
jquery Banner轮播选项卡
2016/12/26 Javascript
canvas实现简易的圆环进度条效果
2017/02/28 Javascript
NProgress显示顶部进度条效果及使用详解
2019/09/21 Javascript
[03:00]DOTA2-DPC中国联赛1月18日Recap集锦
2021/03/11 DOTA
让Python代码更快运行的5种方法
2015/06/21 Python
Python操作Excel之xlsx文件
2017/03/24 Python
django上传图片并生成缩略图方法示例
2017/12/11 Python
Python文本特征抽取与向量化算法学习
2017/12/22 Python
python使用tensorflow保存、加载和使用模型的方法
2018/01/31 Python
Python IDLE清空窗口的实例
2018/06/25 Python
Python学习笔记之列表推导式实例分析
2019/08/13 Python
python 实现dict转json并保存文件
2019/12/05 Python
Python的赋值、深拷贝与浅拷贝的区别详解
2020/02/12 Python
python实现控制台输出彩色字体
2020/04/05 Python
Python使用sqlite3模块内置数据库
2020/05/07 Python
python Paramiko使用示例
2020/09/21 Python
Django启动时找不到mysqlclient问题解决方案
2020/11/11 Python
解释下面关于J2EE的名词
2013/11/15 面试题
应届毕业生的自我鉴定
2013/11/13 职场文书
机电一体化专业应届生求职信
2013/11/27 职场文书
保密协议书范本
2014/04/22 职场文书
教师师德师风自我剖析材料
2014/09/29 职场文书
2015-2016年小学教导工作总结
2015/07/21 职场文书
Python中tkinter的用户登录管理的实现
2021/04/22 Python
OpenCV绘制圆端矩形的示例代码
2021/08/30 Python
画错魏国疆域啦!《派对咖孔明》动画因作画失误于官网致歉
2022/04/07 日漫