备份数据库结构
原始数据库表结构
CREATE TABLE `users` (
`uid` varchar(50) NOT NULL COMMENT '用户ID',
`pwd` varchar(50) NOT NULL COMMENT '密码',
`name` varchar(50) NOT NULL COMMENT '用户名',
PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='权限用户表';
代码
/**
* 把表的结构转换成为SQL
* $table: 要进行提取的表名
* 返回提取后的SQL集合
*/
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] . ";";
return $tabledump;
}
打印结果
string(285) "DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`uid` varchar(50) NOT NULL COMMENT '用户ID',
`pwd` varchar(50) NOT NULL COMMENT '密码',
`name` varchar(50) NOT NULL COMMENT '用户名',
PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='权限用户表';"
备份数据库结构和所有数据
原始数据库结构和数据
CREATE TABLE `users` (
`uid` varchar(50) NOT NULL COMMENT '用户ID',
`pwd` varchar(50) NOT NULL COMMENT '密码',
`name` varchar(50) NOT NULL COMMENT '用户名',
PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='权限用户表';
代码
/**
* 把表的结构和数据转换成为SQL
* $table: 要进行提取的表名
* 返回提取后的SQL集合
*/
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 . "'" . $row[$i] . "'";
$comma = ", ";
}
$tabledump .= ");\n";
}
return trim($tabledump, "\n");
}
打印结果
string(549) "DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`uid` varchar(50) NOT NULL COMMENT '用户ID',
`pwd` varchar(50) NOT NULL COMMENT '密码',
`name` varchar(50) NOT NULL COMMENT '用户名',
PRIMARY KEY (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='权限用户表';
INSERT INTO users VALUES('lisi', '123', '李四');
INSERT INTO users VALUES('maqi', '123', '马七');
INSERT INTO users VALUES('niuniu', '123', '牛牛');
INSERT INTO users VALUES('wangwu', '123', '王五');
INSERT INTO users VALUES('zhangsan', '123', '张三');"
将指定数据库里的所有表备份为一个SQL文件
代码
/**
* $dbname: 备份的数据库名
*/
$dbname = 'xxxxxx';
$q1 = $db->query("show tables");
$mysql = '';
while ($t = $db->fetch_row($q1)) {
$table = $t[0];
$q2 = $db->query("show create table `$table`");
$sql = $db->fetch_row($q2);
$mysql .= $sql[1] . ";\r\n\r\n";
$q3 = $db->query("select * from `$table`");
while ($data = $db->fetch_array($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('Y-m-d') . "_" . $dbname . ".sql"; // 文件名为当天的日期
$fp = fopen($filename, 'w');
fputs($fp, $mysql);
fclose($fp);
echo "数据备份成功,生成备份文件" . $filename;