发现自己之前写的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文件的更多相关文章

  1. MYSQL导入导出.sql文件

    MYSQL导入导出.sql文件   一.MYSQL的命令行模式的设置:桌面->我的电脑->属性->环境变量->新建->PATH=“:path\mysql\bin;”其中p ...

  2. mysql 导入导出sql文件

    使用mysqldump导出sql文件 目前清楚的mysqldump语法是: mysqldump -h[hostname] -u[username] -p [databasename] > [sq ...

  3. navicat如何导入sql文件和导出sql文件

    http://jingyan.baidu.com/article/a65957f4976aad24e67f9b9b.html ************************************* ...

  4. Navicat 导出sql文件和导入sql文件

    1.导出sql文件 (1)选择需要导出数据库表,右击--->转储为sql文件---->结构和数据 (2)会弹出如下界面,采用默认的数据表名,点击确认即可. 2.导入sql文件 (1)点击表 ...

  5. 远程linux服务器mysql数据库导入和导出.sql文件

    大部分情况本地开发环境为windows,部署的服务器为Linux,本地数据库导出.sql文件后需要远程导入服务器,具体如下. 首先连接服务器,即服务器ip,协议,端口,用户名及密码,可以通过ftp客户 ...

  6. Mysql---C#在cmd中使用mysqldump导出sql文件

    一.概述 本文描述了在C#中利用mysqldump工具导出sql文件. 二.代码片段 CmdHelper类代码如下: public class CmdHelper { public static st ...

  7. mysql导入导出sql文件

    window下 1.导出整个数据库mysqldump -u 用户名 -p 数据库名 > 导出的文件名mysqldump -u dbuser -p dbname > dbname.sql2. ...

  8. 使用MYSQL命令直接导入导出SQL文件

    很多时候,我们的数据开发都会用到很多开发利器,比如powerdesigner, navicat等这些软件,虽然好用,但是要收费,在公司里面是禁止使用盗版软件的,怕罚款各方面的,所以我们也不敢直接在公司 ...

  9. 命令行模式下 MYSQL导入导出.sql文件的方法

    一.MYSQL的命令行模式的设置:桌面->我的电脑->属性->环境变量->新建->PATH=“:path\mysql\bin;”其中path为MYSQL的安装路径.二.简 ...

  10. mysql 导入导出.sql文件

    备份数据库(包含全部表和全部存储过程):C:\Documents and Settings\Administrator>mysqldump -h localhost -u root -p -R ...

随机推荐

  1. 3 CRM 销售与客户 我的客户,公共客户池

    1.销售与客户的表结构 1.公共客户与我的客户 ---公共客户(公共资源) 1.没有报名 2.3天没有跟进 3.15天没有成单 客户分布表 龙泰 男 yuan 2018-5-1 3天未跟进 龙泰 男 ...

  2. C语言编译过程以及gcc编译参数

    1.1       C语言编译过程,gcc参数简介 1.1.1          C语言编译过程 一.gcc - o a a.c -o:指定文件输出名字 二.C语言编译的过程: 1.1.1       ...

  3. mysql查询操作之单表查询、多表查询、子查询

    一.单表查询 单表查询的完整语法: .完整语法(语法级别关键字的排列顺序如下) select distinct 字段1,字段2,字段3,... from 库名.表名 where 约束条件 group ...

  4. mongodb原生node驱动

    写在前面 最近读<node.js学习指南>,对于mongodb没有介绍太多的工作原理,但是对于一个前端开发者,即使你还没有用过这种数据库也可以让你很好的理解和使用       一本非常好的 ...

  5. RegExp正则匹配模式汇总

    正则表达式提供另一种强大的文本搜索和处理方式,对于正则表达式,不同语言有着不同的实现,JavaScript采用的Perl5的语法.对于极少数匹配模式是简单的全字符文本的情况,我们往往会采用indexO ...

  6. 使用scrapy框架的monkey出现monkeypatchwarning: monkey-patching ssl after ssl...的解决办法

    问题描述:  环境情况: pycharm 2016.1.4———-python 3.6.0——–windows10系统 在scrapy爬虫框架中, 使用协程gevent中的monkey时, 可能会出现 ...

  7. centos7安装vim以及在vim中显示中文

    1.centos7安装vim yum -y install vim(简单粗暴安装方法) 2.在vim中显示中文不出现乱码 (1).vim ~/.vimrc (~/.vimrc为vim配置文件) (2) ...

  8. aircrack-ng无线破解实验

    查看无线网卡 airmon-ng 开启网卡监听模式 airmon-ng start wlan0 扫描附近的wifi airodump-ng wlan0mon 停止扫描: ctrl c 使用airodu ...

  9. 通过exp命令对Oracle数据库进行备份操作(提供两种情况的备份:备份本地,备份远程的数据库)

    exp 用户名/密码@数据库所在ip地址:数据库端口号/数据库的service-name file=存储到的位置 这个是能成功的 http://www.2cto.com/database/201402 ...

  10. 王者荣耀交流协会final发布第四次scrum例会

    1.例会照片 成员高远博,冉华,王磊,王玉玲,任思佳,袁玥,王磊,王超同学因参加比赛不在学校,不能出席. master:王玉玲 2.时间跨度 2017年12月4日 18:00 — 18:18,总计18 ...