发现自己之前写的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. docker部署jenkins环境

    首先获取jenkins的镜像: docker pull jenkins 设置jenkins_home映射: sudo mkidr -p /jenkins_home /jenkins_home 启动容器 ...

  2. 使用Serilog输出到ES(使用笔记)

    第一步:安装Serilog 使用NuGet包安装以下组件: Serilog.AspNetCoreSerilog.Settings.ConfigurationSerilog.Sinks.ConsoleS ...

  3. 记一个小bug的锅

    人生中的第一个线上bug 我参与的第一个项目就出现了.但是自己还觉得这锅也不全是自己的,毕竟那么明显的bug出现在历史模块中(不是我写的新模块),难道测试部就没一点责任?代码走查人员就没一点责任?不过 ...

  4. jmeter☞工作区介绍(三)

    基于jmeter4.0,jdk1.8 目录树:存放设计过程中使用的元件.执行过程中默认是从根节点开始顺序遍历元件.比如说HTTP请求的取样器就是元件,组件就是一个或多个元件的集合. 测试计划编辑区域: ...

  5. Python 字符串 整数 浮点数

    • 几个函数: str() : 将一个整数或者浮点数变成字符串 int() : 将一个浮点数或一个字符串变成整数 float : 将一个整数或者字符串变成一个浮点型数据 • 整数的运算永远是精确的,而 ...

  6. JUC——阻塞队列

    Queue是一个队列,而队列的主要特征是FIFO先进先出,要实现生产者与消费者模型,也可以采用队列来进行中间的缓冲读取,好处是:生产者可以一直不停歇的生产数据. BlockingQueue是Queue ...

  7. idea_debug

    条件断点 快捷键 cmd + shift +f8 demo 表达式求值 注意,调试的时候,选中相应变量 alt + f8 demo set value (感觉会非常有用) 调试时直接改变变量的值,快捷 ...

  8. CHAPTER 24 History of Our Planet 第24章 我们行星的历史

    CHAPTER 24 History of Our Planet 第24章 我们行星的历史 Uncovering the bones of ancient beasts is only part of ...

  9. 云计算时代,传统企业 IT 从业者如何做好转型?

    本文来源于国外社区 DZone,作者 Dennis O'Reilly 撰写过多篇关于云计算.混合云等内容的文章,本文内容围绕云计算时代,企业纷纷上云,传统 IT 从业者如何做好转型. 本文由“数梦工场 ...

  10. 用线性分类器实现预测鸢尾花的种类(python)

    这是个人学习时跑的代码,结果就不贴了,有需要的可以自己运行,仅供参考,有不知道的可以私下交流,有问题也可以联系我.当然了我也只能提供一点建议,毕竟我也只是初学者 第一个页面 # -*- coding: ...