<?php
$host="localhost";
$user="root";
$password="";
$dbname="database";
mysql_connect($host,$user,$password);
mysql_select_db($dbname);
$mysql= "set charset utf8;\r\n";#字符集
$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('Ymj').".sql"; //文件名为当天的日期
$fp = fopen($filename,'w');
fputs($fp,$mysql);
fclose($fp);
echo "<br><center>数据备份成功,生成备份文件".$filename."</center>";
?>
$host="localhost";
$user="root";
$password="";
$dbname="database";
mysql_connect($host,$user,$password);
mysql_select_db($dbname);
$mysql= "set charset utf8;\r\n";#字符集
$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('Ymj').".sql"; //文件名为当天的日期
$fp = fopen($filename,'w');
fputs($fp,$mysql);
fclose($fp);
echo "<br><center>数据备份成功,生成备份文件".$filename."</center>";
?>
如果PHP调用显示正常,但是在phpmyadmin里面看是乱码,那么将
$mysql= "set charset utf8;\r\n";#字符集
里面的字符集修改成相应的再导出方可解决乱码,再导入回数据库就OK了。
出现这种情况是因为PHP里面查询前没有用到SQL的
set charset
,导致写入的时侯还是用默认的latin1字符集。