php 数据库在线备份代码
function sqldumptable($table, $fp=0) {
$tabledump = drop table if exists $table;n;
$tabledump .= create table $table (n;
$firstfield=1;
$fields = mysql_query(show fields from $table);
while ($field = mysql_fetch_array($fields)) {
if (!$firstfield) {
$tabledump .= ,n;
} else {
$firstfield=0;
}
$tabledump .= $field[field] $field[type];
if (!empty($field[default])) {
$tabledump .= default '$field[default]';
}
if ($field['null'] != yes) {
$tabledump .= not null;
}
if ($field['extra'] != ) {
$tabledump .= $field[extra];
}
}
mysql_free_result($fields);
$keys = mysql_query(show keys from $table);
while ($key = mysql_fetch_array($keys)) {
$kname=$key['key_name'];
if ($kname != primary and $key['non_unique'] == 0) {
$kname=unique|$kname;
}
if(!is_array($index[$kname])) {
$index[$kname] = array();
}
$index[$kname][] = $key['column_name'];
}
mysql_free_result($keys);
while(list($kname, $columns) = @each($index)) {
$tabledump .= ,n;
$colnames=implode($columns,,);
if ($kname == primary) {
$tabledump .= primary key ($colnames);
} else {
if (substr($kname,0,6) == unique) {
$kname=substr($kname,7);
}
$tabledump .= key $kname ($colnames);
}
}
$tabledump .= n);nn;
if ($fp) {
fwrite($fp,$tabledump);
} else {
echo $tabledump;
}
$rows = mysql_query(select * from $table);
$numfields = mysql_num_fields($rows);
while ($row = mysql_fetch_array($rows)) {
$tabledump = insert into $table values(;
$fieldcounter=-1;
$firstfield=1;
while (++$fieldcounter if (!$firstfield) {
$tabledump.=, ;
} else {
$firstfield=0;
}
if (!isset($row[$fieldcounter])) {
$tabledump .= null;
} else {
$tabledump .= '.mysql_escape_string($row[$fieldcounter]).';
}
}
$tabledump .= );n;
if ($fp) {
fwrite($fp,$tabledump);
} else {
echo $tabledump;
}
}
mysql_free_result($rows);
}
@mysql_connect($servername,$dbusername,$dbpassword) or die(数据库连接失败);
@mysql_select_db($dbname) or die(选择数据库失败);
$table = array_flip($_post['table']);
$result = mysql_query(show tables);
echo ($result) ? null : 出错: .mysql_error();
$filename = basename($_server['http_host']._mysql.sql);
header('content-type: application/unknown');
header('content-disposition: attachment; filename='.$filename);
$mysqldata = '';
while ($currow = mysql_fetch_array($result)) {
if (isset($table[$currow[0]])) {
$mysqldata.= sqldumptable($currow[0]);
$mysqldata.= $mysqldata.rn;
}
}
mysql_close();
exit;