PHP备份数据库生成SQL文件并下载的方法

这是一个将指定数据库里的所有表备份为一个SQL文件,可下载。这个源码来自dedecms程序,功能挺多,也很实用,但是代码的质量还有待提高

	<li><!?php?? ?</li>
	<li>?? ?</li>
	<li>/******???备份数据库结构?******/?? ?</li>
	<li>???? ?</li>
	<li>??????/*? ?</li>
	<li>??????函数名称:table2sql()? ?</li>
	<li>??????函数功能:把表的结构转换成为SQL? ?</li>
	<li>??????函数参数:$table:?要进行提取的表名? ?</li>
	<li>??????返?回?值:返回提取后的结果,SQL集合? ?</li>
	<li>??????函数作者:heiyeluren? ?</li>
	<li>??????*/?? ?</li>
	<li>???? ?</li>
	<li>?????function?table2sql($table)?? ?</li>
	<li>??????{?? ?</li>
	<li>??????????global?$db;?? ?</li>
	<li>?????????$tabledump?=?"DROP?TABLE?IF?EXISTS?$table;n";?? ?</li>
	<li>?????????$createtable?=?$db--->query("SHOW?CREATE?TABLE?$table");?? ?</li>
	<li>?????????$create?=?$db->fetch_row($createtable);?? ?</li>
	<li>?????????$tabledump?.=?$create[1].";nn";?? ?</li>
	<li>??????????return?$tabledump;?? ?</li>
	<li>??????}?? ?</li>
	<li>???? ?</li>
	<li>???? ?</li>
	<li>?????/******?备份数据库结构和所有数据?******/?? ?</li>
	<li>??????/*? ?</li>
	<li>??????函数名称:data2sql()? ?</li>
	<li>??????函数功能:把表的结构和数据转换成为SQL? ?</li>
	<li>??????函数参数:$table:?要进行提取的表名? ?</li>
	<li>??????返?回?值:返回提取后的结果,SQL集合? ?</li>
	<li>??????函数作者:heiyeluren? ?</li>
	<li>??????*/?? ?</li>
	<li>?????function?data2sql($table)?? ?</li>
	<li>??????{?? ?</li>
	<li>??????????global?$db;?? ?</li>
	<li>?????????$tabledump?=?"DROP?TABLE?IF?EXISTS?$table;n";?? ?</li>
	<li>?????????$createtable?=?$db->query("SHOW?CREATE?TABLE?$table");?? ?</li>
	<li>?????????$create?=?$db->fetch_row($createtable);?? ?</li>
	<li>?????????$tabledump?.=?$create[1].";nn";?? ?</li>
	<li>???? ?</li>
	<li>?????????$rows?=?$db->query("SELECT?*?FROM?$table");?? ?</li>
	<li>?????????$numfields?=?$db->num_fields($rows);?? ?</li>
	<li>?????????$numrows?=?$db->num_rows($rows);?? ?</li>
	<li>??????????while?($row?=?$db->fetch_row($rows))?? ?</li>
	<li>??????????{?? ?</li>
	<li>?????????????$comma?=?"";?? ?</li>
	<li>?????????????$tabledump?.=?"INSERT?INTO?$table?VALUES(";?? ?</li>
	<li>??????????????for($i?=?0;?$i?<?$numfields;?$i++)?? ?</li>
	<li>??????????????{?? ?</li>
	<li>?????????????????$tabledump?.=?$comma."'".mysql_escape_string($row[$i])."'";?? ?</li>
	<li>?????????????????$comma?=?",";?? ?</li>
	<li>??????????????}?? ?</li>
	<li>?????????????$tabledump?.=?");n";?? ?</li>
	<li>??????????}?? ?</li>
	<li>?????????$tabledump?.=?"n";?? ?</li>
	<li>???? ?</li>
	<li>??????????return?$tabledump;?? ?</li>
	<li>??????}?? ?</li>
	<li>?>?? ?</li>
	<li>?? ?</li>
	<li><!--?php??????? ?</li>
	<li>$host="localhost";?//主机名??????? ?</li>
	<li>$user="root";?//<a rel="noopener noreferrer nofollow" href="http://www.chhua.com/web-notetag/mysql" rel="noopener noreferrer nofollow" target="_blank" title="MYSQL">MYSQL</a>用户名??????? ?</li>
	<li>$password="root";?//密码??????? ?</li>
	<li>$dbname="dedecmsv4";?//备份的数据库??????? ?</li>
	<li>????? ?</li>
	<li>mysql_connect($host,$user,$password);??????? ?</li>
	<li>mysql_select_db($dbname);??????? ?</li>
	<li>????? ?</li>
	<li>$q1=mysql_query("show?tables");??????? ?</li>
	<li>while($t=mysql_fetch_array($q1)){??????? ?</li>
	<li>$table=$t[0];??????? ?</li>
	<li>$q2=mysql_query("show?create?table?`$table`");??????? ?</li>
	<li>$sql=mysql_fetch_array($q2);??????? ?</li>
	<li>$mysql.=$sql['Create?Table'].";rnrn";#DDL??????? ?</li>
	<li>????? ?</li>
	<li>$q3=mysql_query("select?*?from?`$table`");??????? ?</li>
	<li>while($data=mysql_fetch_assoc($q3))??????? ?</li>
	<li>{??????? ?</li>
	<li>$keys=array_keys($data);??????? ?</li>
	<li>$keys=array_map('addslashes',$keys);??????? ?</li>
	<li>$keys=join('`,`',$keys);??????? ?</li>
	<li>$keys="`".$keys."`";??????? ?</li>
	<li>$vals=array_values($data);??????? ?</li>
	<li>$vals=array_map('addslashes',$vals);??????? ?</li>
	<li>$vals=join("','",$vals);??????? ?</li>
	<li>$vals="'".$vals."'";??????? ?</li>
	<li>????? ?</li>
	<li>$mysql.="insert?into?`$table`($keys)?values($vals);rn";??????? ?</li>
	<li>}??????? ?</li>
	<li>$mysql.="rn";??????? ?</li>
	<li>????? ?</li>
	<li>}??????? ?</li>
	<li>$filename=date('Ymd')."_".$dbname.".sql";?//文件名为当天的日期??????? ?</li>
	<li>$fp?=?fopen($filename,'w');??????? ?</li>
	<li>fputs($fp,$mysql);??????? ?</li>
	<li>fclose($fp);??????? ?</li>
	<li>echo?"数据备份成功,生成备份文件".$filename;??????? ?</li>
	<li>?>???</li>