欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  php教程

PHP导出sql文件

程序员文章站 2022-04-11 19:59:02
...

发现自己之前写的php导出sql数据为Excel文件在导出一些数据的时候出现了精度的问题,比如导出身份证号的时候会把后面变成0000。暂时先把这个问题留下,有空去看看到底是什么问题。 写了一个导出sql的工具。稍微加了下界面,把功能也做多了点,简单来说,就是

发现自己之前写的php导出sql数据为Excel文件在导出一些数据的时候出现了精度的问题,比如导出身份证号的时候会把后面变成0000。暂时先把这个问题留下,有空去看看到底是什么问题。

写了一个导出sql的工具。稍微加了下界面,把功能也做多了点,简单来说,就是三个功能:

  1.直接在浏览器上显示sql文件内容。

  2.直接导出到服务器上,要求目录要可写。

  3.直接下载到本地,脱库时感觉还不错。

好了直接贴上代码:

sqldump.php

php
    if (isset($_REQUEST['option'])) {
        define('DOWNLOAD', $_REQUEST['option']);
    }else{
        define('DOWNLOAD',0);//0代表直接显示,1代表下载,2代表导出在本地
    }
    if (DOWNLOAD != 1) {
        header("Content-type:text/html;charset=utf-8");
    }
    $cfg_dbhost ='localhost';
    $cfg_dbname ='mysql';
    $cfg_dbuser ='root';
    $cfg_dbpwd ='';
    $cfg_db_language ='utf8';

    //配置信息
    $cfg_dbhost = isset($_REQUEST['dbhost'])?$_REQUEST['dbhost']:$cfg_dbhost;
    $cfg_dbname = isset($_REQUEST['dbname'])?$_REQUEST['dbname']:$cfg_dbname;
    $cfg_dbuser = isset($_REQUEST['dbuser'])?$_REQUEST['dbuser']:$cfg_dbuser;
    $cfg_dbpwd = isset($_REQUEST['dbpwd'])?$_REQUEST['dbpwd']:$cfg_dbpwd;
    $cfg_db_language = isset($_REQUEST['dbc'])?$_REQUEST['dbc']:$cfg_db_language;
    
    $to_file_name =isset($_REQUEST['dbtable'])?$_REQUEST['dbtable'].".sql":$cfg_dbname.".sql";

    if (DOWNLOAD==2) {
        $to_file_name =isset($_REQUEST['dbtable'])?dirname(__FILE__).DIRECTORY_SEPARATOR.$_REQUEST['dbtable'].".sql":dirname(__FILE__).DIRECTORY_SEPARATOR.$cfg_dbname.".sql";
    }
    // END 配置

    //链接数据库
    $link = @mysql_connect($cfg_dbhost,$cfg_dbuser,$cfg_dbpwd);
    $link==null?die('mysql connect error'):'';
    @mysql_select_db($cfg_dbname);
    //选择编码
    @mysql_query("set names ".$cfg_db_language);
    //数据库中有哪些表
    $tabList = isset($_REQUEST['dbtable'])?array("{$_REQUEST['dbtable']}"):list_tables($cfg_dbname);
    $tabList==null?die('no tables found'):'';
    if (DOWNLOAD==1) {
        Header("Content-type: application/octet-stream");
        Header("Accept-Ranges: bytes");
        Header("Content-Disposition: attachment; filename=".$to_file_name);
    }
    if (DOWNLOAD==2) {
        echo "正在导出...
"; } $info = "-- ----------------------------\r\n"; $info .= "-- 备份日期:".date("Y-m-d H:i:s",time())."\r\n"; $info .= "-- ----------------------------\r\n\r\n"; if (DOWNLOAD==2) { file_put_contents($to_file_name,$info,FILE_APPEND); }else{ echo $info; } //将每个表的表结构导出到文件 foreach($tabList as $val){ $sql = "show create table ".$val; $res = @mysql_query($sql,$link); if ($res==null) { die('table `'.$val.'` not EXISTS'); } $row = @mysql_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"; if (DOWNLOAD==2) { //追加到文件 file_put_contents($to_file_name,$sqlStr,FILE_APPEND); }else{ echo $sqlStr; } //释放资源 @mysql_free_result($res); } //将每个表的数据导出到文件 foreach($tabList as $val){ if(DOWNLOAD==2){ echo "正在导出表`".$val."`...
"; } $sql = "select * from ".$val; $res = @mysql_query($sql,$link); //如果表中没有数据,则继续下一张表 if(@mysql_num_rows($res)continue