发现自己之前写的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. 04-cookies 会话跟踪技术

    1.会话跟踪技术 1.Http协议的无状态保存 会话理解为客户端与服务器之间的一次会晤,在一次会晤中可能会包含多次请求和响应 2 .会话路径技术使用Cookie或session完成 我们知道HTTP协 ...

  2. 使用Themeleaf时, HTML内嵌的JS代码需要注意< 和 >的问题

    如果你使用了Themeleaf, 你的HTML文件又使用了内嵌的JS代码,那么一定要注意 你的JS代码必须用这样用: <script> /*<![CDATA[*/ var a = 6 ...

  3. Package设计1:选择数据类型、暂存数据和并发

    SSIS 设计系列: Package设计1:选择数据类型.暂存数据和并发 Package设计2:增量更新 Package 设计3:数据源的提取和使用暂存 一,数据类型的选择 对于SSIS的数据类型,容 ...

  4. js 日期,时间函数 及相关运算大全

    一.在js中如何比较两个时间字符串的大小 方法一: function CompareDate(d1,d2){     return ((new Date(d1.replace(/-/g,"/ ...

  5. 解决table td里面长串数字或字母不换行的问题

    在html中,经常要用到table标签,一般情况下,table下面的td元素里的东西都是汉字或者说是汉字.字母.数字的混合,在这种情况下,不设置table的宽度,也就是table宽度自适应的时候,浏览 ...

  6. Async方法死锁的问题 Don't Block on Async Code(转)

    今天调试requet.GetRequestStreamAsync异步方法出现不返回的问题,可能是死锁了.看到老外一篇文章解释了异步方法死锁的问题,懒的翻译,直接搬过来了. http://blog.st ...

  7. ORM框架学习之EF

    首先推荐一篇很好的EF文章翻译,可以系统的学习一遍. <Entity Framework 6 Recipes>中文翻译系列 EF使用体会 优点: 可以省去Ado.net复杂的管道连接代码. ...

  8. C++构造函数深度探究

    1.引子: 以下代码中的输出语句输出0吗,为什么? struct Test { int _a; Test(int a) : _a(a) {} Test() { Test(0); } }; Test o ...

  9. 2018年美国大学生数学建模竞赛(MCM/ICM) 比赛心得

    话不多说,题目先上: 这是我们这次选择的题目,说说建模的那些事! 美赛的时间和国赛挑战杯时间略有不同,貌似多的一天是为了让我们对文章进行一个翻译吧QAQ 建议参加美赛的同学可以参照此计划进行 Day0 ...

  10. 如何用Fiddle工具实现手机抓包

    Fiddler官方下载地址:http://fiddler2.com/ 在做手机或移动端APP的接口测试时,我们可以使用fiddler对APP进行抓包确认,抓取对应的网络交互信息.在抓取的信息中可以看到 ...