PHP备份数据库为SQL文件

本文介绍了一种将数据库表结构及数据备份为SQL文件的方法,包括仅备份表结构和同时备份结构与数据两种情况,并提供了具体的PHP实现代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

备份数据库结构

原始数据库表结构

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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

withoutfear

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值