PHP备份数据库生成SQL文件并下载的方法
这是一个将指定数据库里的所有表备份为一个SQL文件,可下载。这个源码来自dedecms程序,功能挺多,也很实用,但是代码的质量还有待提高
<!?php?? ?
?? ?
/******???备份数据库结构?******/?? ?
???? ?
??????/*? ?
??????函数名称:table2sql()? ?
??????函数功能:把表的结构转换成为SQL? ?
??????函数参数:$table:?要进行提取的表名? ?
??????返?回?值:返回提取后的结果,SQL集合? ?
??????函数作者:heiyeluren? ?
??????*/?? ?
???? ?
?????function?table2sql($table)?? ?
??????{?? ?
??????????global?$db;?? ?
?????????$tabledump?=?"DROP?TABLE?IF?EXISTS?$table;\n";?? ?
?????????$createtable?=?$db--->query("SHOW?CREATE?TABLE?$table");?? ?
?????????$create?=?$db->fetch_row($createtable);?? ?
?????????$tabledump?.=?$create[1].";\n\n";?? ?
??????????return?$tabledump;?? ?
??????}?? ?
???? ?
???? ?
?????/******?备份数据库结构和所有数据?******/?? ?
??????/*? ?
??????函数名称:data2sql()? ?
??????函数功能:把表的结构和数据转换成为SQL? ?
??????函数参数:$table:?要进行提取的表名? ?
??????返?回?值:返回提取后的结果,SQL集合? ?
??????函数作者:heiyeluren? ?
??????*/?? ?
?????function?data2sql($table)?? ?
??????{?? ?
??????????global?$db;?? ?
?????????$tabledump?=?"DROP?TABLE?IF?EXISTS?$table;\n";?? ?
?????????$createtable?=?$db->query("SHOW?CREATE?TABLE?$table");?? ?
?????????$create?=?$db->fetch_row($createtable);?? ?
?????????$tabledump?.=?$create[1].";\n\n";?? ?
???? ?
?????????$rows?=?$db->query("SELECT?*?FROM?$table");?? ?
?????????$numfields?=?$db->num_fields($rows);?? ?
?????????$numrows?=?$db->num_rows($rows);?? ?
??????????while?($row?=?$db->fetch_row($rows))?? ?
??????????{?? ?
?????????????$comma?=?"";?? ?
?????????????$tabledump?.=?"INSERT?INTO?$table?VALUES(";?? ?
??????????????for($i?=?0;?$i?<?$numfields;?$i++)?? ?
??????????????{?? ?
?????????????????$tabledump?.=?$comma."'".mysql_escape_string($row[$i])."'";?? ?
?????????????????$comma?=?",";?? ?
??????????????}?? ?
?????????????$tabledump?.=?");\n";?? ?
??????????}?? ?
?????????$tabledump?.=?"\n";?? ?
???? ?
??????????return?$tabledump;?? ?
??????}?? ?
?>?? ?
?? ?
<!--?php??????? ?
$host="localhost";?//主机名??????? ?
$user="root";?//MYSQL用户名??????? ?
$password="root";?//密码??????? ?
$dbname="dedecmsv4";?//备份的数据库??????? ?
????? ?
mysql_connect($host,$user,$password);??????? ?
mysql_select_db($dbname);??????? ?
????? ?
$q1=mysql_query("show?tables");??????? ?
while($t=mysql_fetch_array($q1)){??????? ?
$table=$t[0];??????? ?
$q2=mysql_query("show?create?table?`$table`");??????? ?
$sql=mysql_fetch_array($q2);??????? ?
$mysql.=$sql['Create?Table'].";\r\n\r\n";#DDL??????? ?
????? ?
$q3=mysql_query("select?*?from?`$table`");??????? ?
while($data=mysql_fetch_assoc($q3))??????? ?
{??????? ?
$keys=array_keys($data);??????? ?
$keys=array_map('addslashes',$keys);??????? ?
$keys=join('`,`',$keys);??????? ?
$keys="`".$keys."`";??????? ?
$vals=array_values($data);??????? ?
$vals=array_map('addslashes',$vals);??????? ?
$vals=join("','",$vals);??????? ?
$vals="'".$vals."'";??????? ?
????? ?
$mysql.="insert?into?`$table`($keys)?values($vals);\r\n";??????? ?
}??????? ?
$mysql.="\r\n";??????? ?
????? ?
}??????? ?
$filename=date('Ymd')."_".$dbname.".sql";?//文件名为当天的日期??????? ?
$fp?=?fopen($filename,'w');??????? ?
fputs($fp,$mysql);??????? ?
fclose($fp);??????? ?
echo?"数据备份成功,生成备份文件".$filename;??????? ?
?>???
相关笔记
评论