PHP/ThinkPHP MYSQL数据库导出为.sql文件

1.PHP导出

代码如下(示例):

//配置信息
$cfg_dbhost = 'localhost';
$cfg_dbname = 'xxx';
$cfg_dbuser = 'root';
$cfg_dbpwd = 'root';
$cfg_db_language = 'utf8';
$to_file_name = "xxx.sql"; //导出文件名

//链接数据库
$link = mysqli_connect($cfg_dbhost,$cfg_dbuser,$cfg_dbpwd,$cfg_dbname);
//编码方式
mysqli_query($link,"set names ".$cfg_db_language);
//查询数据库中所有表名,并保存在数组中
$tables = mysqli_query($link,"SHOW TABLES");
while($row = mysqli_fetch_array($tables)){
    $tabList[] = $row[0];
}

//将每个表的表结构导出到文件
foreach($tabList as $val){
    $sql = "show create table ".$val;
    $res = mysqli_query($link,$sql);
    $row = mysqli_fetch_array($res);
    $info = "-- ----------------------------\r\n";
    $info .= "-- Table structure for `".$val."`\r\n";
    $info .= "-- ----------------------------\r\n";
    $info .= "DROP TABLE IF EXISTS `".$val."`;\r\n";
    $sqlStr = $info.$row[1].";\r\n\r\n";
    //把$info写入文件,文件不存在则创建
    file_put_contents($to_file_name,$sqlStr,FILE_APPEND);
    //释放资源
    mysqli_free_result($res);
}
//将每个表的数据导出到文件
foreach($tabList as $val){
    $sql = "select * from ".$val;
    //若只需导出指定数据
         //    switch($val){
        //        case '表名':
        //           $sql = "select * from ".$val." where 条件;
        //           break;
        //        default:
        //            $sql = "select * from ".$val;
        //      }
    $res = mysqli_query($link,$sql);
    //如果表中没有数据,则跳出循环
   if(mysqli_num_rows($res)<1) continue;
    $info = "-- ----------------------------\r\n";
    $info .= "-- Records for `".$val."`\r\n";
    $info .= "-- ----------------------------\r\n";
    file_put_contents($to_file_name,$info,FILE_APPEND);
    //读取数据
    while($row = mysqli_fetch_row($res)){
        $sqlStr = "INSERT INTO `".$val."` VALUES (";
        foreach($row as $zd){
          $sqlStr .= "'".$zd."', ";
        }
        //去掉最后一个逗号和空格
        $sqlStr = substr($sqlStr,0,strlen($sqlStr)-2);
        $sqlStr .= ");\r\n";
        file_put_contents($to_file_name,$sqlStr,FILE_APPEND);
   }
   
    //释放资源
    mysqli_free_result($res);
    file_put_contents($to_file_name,"\r\n",FILE_APPEND);
}

2.ThinkPHP框架导出

代码如下(示例):

$to_file_name = "xxx.sql"; //导出文件名
//链接数据库
$Db = Db::connect([
    'type'      => 'mysql',
    'hostname'    => '127.0.0.1',
    'database'    => 'xxx',// 数据库名
    'username'    => 'root',// 用户名
    'password'    => 'root',//密码
 ]);
//获取表名
 $tabList = $Db -> getTables();

//将每个表的表结构导出到文件
foreach($tabList as $val){
    $sql = "show create table ".$val;
    $res = Db::query($sql);
    $info = "-- ----------------------------\r\n";
    $info .= "-- Table structure for `".$val."`\r\n";
    $info .= "-- ----------------------------\r\n";
    $info .= "DROP TABLE IF EXISTS `".$val."`;\r\n";
    $sqlStr = $info.$res[0]['Create Table'].";\r\n\r\n";
    //追加到文件
    file_put_contents($to_file_name,$sqlStr,FILE_APPEND);
}

//将每个表的数据导出到文件
foreach($tabList as $val){
    $sql = "select * from ".$val;
    //若只需导出指定数据
         //    switch($val){         
                  // case '表名':         
                        // $sql = "select * from ".$val." where 条件;         
                        // break;         
                // default:         
                        // $sql = "select * from ".$val;         
                // }
    $res = Db::query($sql);
    //如果表中没有数据,则跳出循环
    if(count($res) < 1) continue;
    $info = "-- ----------------------------\r\n";
    $info .= "-- Records for `".$val."`\r\n";
    $info .= "-- ----------------------------\r\n";
    file_put_contents($to_file_name,$info,FILE_APPEND);
    //读取数据
    foreach($res as $v){
        $sqlStr = "INSERT INTO `".$val."` VALUES (";
        foreach($v as $zd){
            $sqlStr .= "'".$zd."', ";
        }
         //去掉最后一个逗号和空格
        $sqlStr = substr($sqlStr,0,strlen($sqlStr)-2);
        $sqlStr .= ");\r\n";
        file_put_contents($to_file_name,$sqlStr,FILE_APPEND);
    }
   
    file_put_contents($to_file_name,"\r\n",FILE_APPEND);
}

参考

使用PHP怎么将MySQL数据库导出为.sql文件

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值