• 技术文章 >php教程 >php手册

    PHP导出sql文件

    2016-06-06 19:48:12原创873

    发现自己之前写的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)<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 "
    导出成功。"; } // 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 dumph1>
    <h3 align="right">Author:Medici.Yan@gmail.comh3>
        <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="默认:"/>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。

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:PHP的语言构造器 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • php利用新浪接口查询ip获取地理位置• 使用PHP 5.0 轻松解析XML文档(4)• PHP保存带BOM文件的方法,• smarty模板引擎从php中获取数据的方法,smarty模板• PHP 修改RAR文件注释及添加压缩文档讲解
    1/1

    PHP中文网