PHP导出sql文件

系统 1875 0

发现自己之前写的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
      
       "正在导出...<hr/>"
      
        ;

    }

    
      
      
        $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
      
      ."`...<br>"
      
        ;

        }

        
      
      
        $sql
      
       = "select * from ".
      
        $val
      
      
        ;

        
      
      
        $res
      
       = @
      
        mysql_query
      
      (
      
        $sql
      
      ,
      
        $link
      
      
        );

        
      
      
        //
      
      
        如果表中没有数据,则继续下一张表
      
      
        if
      
      (@
      
        mysql_num_rows
      
      (
      
        $res
      
      )<1) 
      
        continue
      
      
        ;

        
      
      
        //


      
      
        $info
      
       = "-- ----------------------------\r\n"
      
        ;

        
      
      
        $info
      
       .= "-- Records for `".
      
        $val
      
      ."`\r\n"
      
        ;

        
      
      
        $info
      
       .= "-- ----------------------------\r\n"
      
        ;

        
      
      
        if
      
       (DOWNLOAD==2
      
        ) {

            
      
      
        file_put_contents
      
      (
      
        $to_file_name
      
      ,
      
        $info
      
      ,
      
        FILE_APPEND);

        }
      
      
        else
      
      
        {

            
      
      
        echo
      
      
        $info
      
      
        ;

        }

        
      
      
        //
      
      
        读取数据
      
      
        while
      
      (
      
        $row
      
       = @
      
        mysql_fetch_row
      
      (
      
        $res
      
      
        )){

            
      
      
        $sqlStr
      
       = "INSERT INTO `".
      
        $val
      
      ."` VALUES ("
      
        ;

            
      
      
        foreach
      
      (
      
        $row
      
      
        as
      
      
        $zd
      
      
        ){

                
      
      
        $sqlStr
      
       .= "'".
      
        $zd
      
      ."', "
      
        ;

            }

            
      
      
        //
      
      
        去掉最后一个逗号和空格
      
      
        $sqlStr
      
       = 
      
        substr
      
      (
      
        $sqlStr
      
      ,0,
      
        strlen
      
      (
      
        $sqlStr
      
      )-2
      
        );

            
      
      
        $sqlStr
      
       .= ");\r\n"
      
        ;

            
      
      
        if
      
       (DOWNLOAD==2
      
        ) {

                
      
      
        file_put_contents
      
      (
      
        $to_file_name
      
      ,
      
        $sqlStr
      
      ,
      
        FILE_APPEND);

            }
      
      
        else
      
      
        {

                
      
      
        echo
      
      
        $sqlStr
      
      
        ;

            }

        }

        
      
      
        //
      
      
        释放资源
      
      

        @
      
        mysql_free_result
      
      (
      
        $res
      
      
        );

        
      
      
        if
      
       (DOWNLOAD==2
      
        ) {

            
      
      
        file_put_contents
      
      (
      
        $to_file_name
      
      ,"\r\n",
      
        FILE_APPEND);

        }
      
      
        else
      
      
        {

            
      
      
        echo
      
       "\r\n"
      
        ;

        }

    }

    
      
      
        if
      
      (DOWNLOAD==2
      
        ){

        
      
      
        echo
      
       "<hr/>导出成功。"
      
        ;

    }


      
      
        //
      
      
            echo "End!";
      
      
        function
      
       list_tables(
      
        $database
      
      
        )

    {

        
      
      
        $sql
      
      ='SHOW TABLES FROM '.
      
        $database
      
      
        ;

        
      
      
        $rs
      
       = 
      
        mysql_query
      
      (
      
        $sql
      
      
        );

        
      
      
        $tables
      
       = 
      
        array
      
      
        ();

        
      
      
        while
      
       (
      
        $row
      
       = 
      
        mysql_fetch_row
      
      (
      
        $rs
      
      
        )) {

            
      
      
        $tables
      
      [] = 
      
        $row
      
      [0
      
        ];

        }

        
      
      
        mysql_free_result
      
      (
      
        $rs
      
      
        );

        
      
      
        return
      
      
        $tables
      
      
        ;

    }




      
      ?>
    

然后是界面的东西了,为的是不让自己去记这个烦人的参数。

sqldumpclient.html

      
        <
      
      
        html
      
      
        >
      
      
        <
      
      
        head
      
      
        >
      
      
        <
      
      
        title
      
      
        >
      
      sqldump客户端
      
        </
      
      
        title
      
      
        >
      
      
        <
      
      
        meta 
      
      
        charset
      
      
        ='utf-8'
      
      
        >
      
      
        <
      
      
        script 
      
      
        type
      
      
        ="text/javascript"
      
      
        >
      
      
        function
      
      
         setaction () {

        $(
      
      
        '
      
      
        cform
      
      
        '
      
      
        ).action
      
      
        =
      
      
        $(
      
      
        '
      
      
        act
      
      
        '
      
      
        ).value;

        inputs
      
      
        =
      
      
        document.getElementsByTagName(
      
      
        '
      
      
        input
      
      
        '
      
      
        );

        
      
      
        for
      
      
        (
      
      
        var
      
      
         i 
      
      
        =
      
      
        1
      
      
        ;i
      
      
        <
      
      
        inputs.length
      
      
        -
      
      
        4
      
      
        ;i
      
      
        ++
      
      
        ){

            
      
      
        if
      
      
         (inputs[i].value
      
      
        !=
      
      
        ''
      
      
        ) {

                inputs[i].name
      
      
        =
      
      
        inputs[i].id;

            }

        }



    }

    
      
      
        function
      
      
         $(id){

        
      
      
        return
      
      
         document.getElementById(id);

    }


      
      
        </
      
      
        script
      
      
        >
      
      
        </
      
      
        head
      
      
        >
      
      
        <
      
      
        body
      
      
        >
      
      
        <
      
      
        center
      
      
        >
      
      
        <
      
      
        h1 
      
      
        align
      
      
        ="center"
      
      
        >
      
      PHP sql dump
      
        </
      
      
        h1
      
      
        >
      
      
        <
      
      
        h3 
      
      
        align
      
      
        ="right"
      
      
        >
      
      Author:Medici.Yan@gmail.com
      
        </
      
      
        h3
      
      
        >
      
      
        <
      
      
        form 
      
      
        method
      
      
        ="post"
      
      
         id
      
      
        ='cform' 
      
      
        onsubmit
      
      
        ="setaction()"
      
      
        >
      
      
        <
      
      
        fieldset
      
      
        >
      
      
        <
      
      
        table
      
      
        >
      
      
        <
      
      
        legend
      
      
        >
      
      配置
      
        </
      
      
        legend
      
      
        >
      
      
        <
      
      
        tr
      
      
        >
      
      
        <
      
      
        td
      
      
        ><
      
      
        label 
      
      
        for
      
      
        ="act"
      
      
        >
      
      脚本地址:
      
        </
      
      
        label
      
      
        ></
      
      
        td
      
      
        >
      
      
        <
      
      
        td
      
      
        ><
      
      
        input 
      
      
        type
      
      
        ="text"
      
      
         id
      
      
        ='act' 
      
      
        placeholder
      
      
        ="http://www.example.com/sqldump.php"
      
      
        /></
      
      
        td
      
      
        >
      
      
        <
      
      
        td 
      
      
        rowspan
      
      
        ="7"
      
      
         width
      
      
        ="100"
      
      
        >
      
      使用方法:把sqldump.php传到服务器上,然后在这里填写相关参数,也可以直接访问脚本
      
        </
      
      
        td
      
      
        >
      
      
        </
      
      
        tr
      
      
        >
      
      
        <
      
      
        tr
      
      
        >
      
      
        <
      
      
        td
      
      
        ><
      
      
        label 
      
      
        for
      
      
        ="dbhost"
      
      
        >
      
      数据库地址:
      
        </
      
      
        label
      
      
        ></
      
      
        td
      
      
        >
      
      
        <
      
      
        td
      
      
        ><
      
      
        input 
      
      
        type
      
      
        ="text"
      
      
         id
      
      
        ="dbhost"
      
      
         placeholder
      
      
        ="默认:localhost"
      
      
        /></
      
      
        td
      
      
        >
      
      
        </
      
      
        tr
      
      
        >
      
      
        <
      
      
        tr
      
      
        >
      
      
        <
      
      
        td
      
      
        ><
      
      
        label 
      
      
        for
      
      
        ="dbname"
      
      
        >
      
      数据库名:
      
        </
      
      
        label
      
      
        ></
      
      
        td
      
      
        >
      
      
        <
      
      
        td
      
      
        ><
      
      
        input 
      
      
        type
      
      
        ="text"
      
      
         id
      
      
        ="dbname"
      
      
         placeholder
      
      
        ="默认:mysql"
      
      
        /></
      
      
        td
      
      
        >
      
      
        </
      
      
        tr
      
      
        >
      
      
        <
      
      
        tr
      
      
        >
      
      
        <
      
      
        td
      
      
        ><
      
      
        label 
      
      
        for
      
      
        ="dbuser"
      
      
        >
      
      用户名:
      
        </
      
      
        label
      
      
        ></
      
      
        td
      
      
        >
      
      
        <
      
      
        td
      
      
        ><
      
      
        input 
      
      
        type
      
      
        ="text"
      
      
         id
      
      
        ="dbuser"
      
      
         placeholder
      
      
        ="默认:root"
      
      
        /></
      
      
        td
      
      
        >
      
      
        </
      
      
        tr
      
      
        >
      
      
        <
      
      
        tr
      
      
        >
      
      
        <
      
      
        td
      
      
        ><
      
      
        label 
      
      
        for
      
      
        ="dbpwd"
      
      
        >
      
      密码:
      
        </
      
      
        label
      
      
        ></
      
      
        td
      
      
        >
      
      
        <
      
      
        td
      
      
        ><
      
      
        input 
      
      
        type
      
      
        ="text"
      
      
         id
      
      
        ="dbpwd"
      
      
         placeholder
      
      
        ="默认:<empty>"
      
      
        /></
      
      
        td
      
      
        >
      
      
        </
      
      
        tr
      
      
        >
      
      
        <
      
      
        tr
      
      
        >
      
      
        <
      
      
        td
      
      
        ><
      
      
        label 
      
      
        for
      
      
        ="dbc"
      
      
        >
      
      字符集:
      
        </
      
      
        label
      
      
        ></
      
      
        td
      
      
        >
      
      
        <
      
      
        td
      
      
        >
      
      
        <
      
      
        input 
      
      
        list
      
      
        ="charlist"
      
      
         id
      
      
        ="dbc"
      
      
         placeholder
      
      
        ="默认:utf8"
      
      
        />
      
      
        <
      
      
        datalist 
      
      
        id
      
      
        ="charlist"
      
      
        >
      
      
        <
      
      
        option 
      
      
        value
      
      
        ="utf8"
      
      
        />
      
      
        <
      
      
        option 
      
      
        value
      
      
        ="gbk"
      
      
        />
      
      
        <
      
      
        option 
      
      
        value
      
      
        ="gb2312"
      
      
        />
      
      
        </
      
      
        datalist
      
      
        >
      
      
        </
      
      
        td
      
      
        >
      
      
        </
      
      
        tr
      
      
        >
      
      
        <
      
      
        tr
      
      
        >
      
      
        <
      
      
        td
      
      
        ><
      
      
        label 
      
      
        for
      
      
        ="dbtable"
      
      
        >
      
      表名:
      
        </
      
      
        label
      
      
        ></
      
      
        td
      
      
        >
      
      
        <
      
      
        td
      
      
        ><
      
      
        input 
      
      
        type
      
      
        ="text"
      
      
         id
      
      
        ="dbtable"
      
      
         placeholder
      
      
        ="为空代表所有表"
      
      
        /></
      
      
        td
      
      
        >
      
      
        </
      
      
        tr
      
      
        >
      
      
        <
      
      
        tr
      
      
        >
      
      
        <
      
      
        td
      
      
        ><
      
      
        label 
      
      
        for
      
      
        ="option"
      
      
        >
      
      导出方式:
      
        </
      
      
        label
      
      
        ></
      
      
        td
      
      
        >
      
      
        <
      
      
        td
      
      
        >
      
      
        <
      
      
        input 
      
      
        type
      
      
        ="radio"
      
      
         id
      
      
        ="option"
      
      
         name
      
      
        ="option"
      
      
         value
      
      
        ="0"
      
      
         checked
      
      
        ="checked"
      
      
        >
      
      
        浏览器显示

                
      
      
        <
      
      
        input 
      
      
        type
      
      
        ="radio"
      
      
         id
      
      
        ="option"
      
      
         name
      
      
        ="option"
      
      
         value
      
      
        ="1"
      
      
        >
      
      
        下载到本地

                
      
      
        <
      
      
        input 
      
      
        type
      
      
        ="radio"
      
      
         id
      
      
        ="option"
      
      
         name
      
      
        ="option"
      
      
         value
      
      
        ="2"
      
      
        >
      
      
        导出至服务器

                
      
      
        </
      
      
        td
      
      
        >
      
      
        </
      
      
        tr
      
      
        >
      
      
        <
      
      
        tr
      
      
        >
      
      
        <
      
      
        td
      
      
        ><
      
      
        input 
      
      
        type
      
      
        ="submit"
      
      
         value
      
      
        ="开始"
      
      
        /></
      
      
        td
      
      
        >
      
      
        </
      
      
        tr
      
      
        >
      
      
        </
      
      
        table
      
      
        >
      
      
        </
      
      
        fieldset
      
      
        >
      
      
        </
      
      
        form
      
      
        >
      
      
        </
      
      
        center
      
      
        >
      
      
        </
      
      
        body
      
      
        >
      
      
        </
      
      
        html
      
      
        >
      
    

用法也很简单,把sqldump.php传到服务器上,然后在本地运行sqldumpclient.html,写上相关参数就OK。

 

PHP导出sql文件


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论