PHP导出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 "正在导出...<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文件的更多相关文章
- MYSQL导入导出.sql文件
MYSQL导入导出.sql文件 一.MYSQL的命令行模式的设置:桌面->我的电脑->属性->环境变量->新建->PATH=“:path\mysql\bin;”其中p ...
- mysql 导入导出sql文件
使用mysqldump导出sql文件 目前清楚的mysqldump语法是: mysqldump -h[hostname] -u[username] -p [databasename] > [sq ...
- navicat如何导入sql文件和导出sql文件
http://jingyan.baidu.com/article/a65957f4976aad24e67f9b9b.html ************************************* ...
- Navicat 导出sql文件和导入sql文件
1.导出sql文件 (1)选择需要导出数据库表,右击--->转储为sql文件---->结构和数据 (2)会弹出如下界面,采用默认的数据表名,点击确认即可. 2.导入sql文件 (1)点击表 ...
- 远程linux服务器mysql数据库导入和导出.sql文件
大部分情况本地开发环境为windows,部署的服务器为Linux,本地数据库导出.sql文件后需要远程导入服务器,具体如下. 首先连接服务器,即服务器ip,协议,端口,用户名及密码,可以通过ftp客户 ...
- Mysql---C#在cmd中使用mysqldump导出sql文件
一.概述 本文描述了在C#中利用mysqldump工具导出sql文件. 二.代码片段 CmdHelper类代码如下: public class CmdHelper { public static st ...
- mysql导入导出sql文件
window下 1.导出整个数据库mysqldump -u 用户名 -p 数据库名 > 导出的文件名mysqldump -u dbuser -p dbname > dbname.sql2. ...
- 使用MYSQL命令直接导入导出SQL文件
很多时候,我们的数据开发都会用到很多开发利器,比如powerdesigner, navicat等这些软件,虽然好用,但是要收费,在公司里面是禁止使用盗版软件的,怕罚款各方面的,所以我们也不敢直接在公司 ...
- 命令行模式下 MYSQL导入导出.sql文件的方法
一.MYSQL的命令行模式的设置:桌面->我的电脑->属性->环境变量->新建->PATH=“:path\mysql\bin;”其中path为MYSQL的安装路径.二.简 ...
- mysql 导入导出.sql文件
备份数据库(包含全部表和全部存储过程):C:\Documents and Settings\Administrator>mysqldump -h localhost -u root -p -R ...
随机推荐
- 【HNOI2014】江南乐
题面 题解 知识引入 - \(SG\)函数 任何一个公平组合游戏都可以通过把每个局面看成一个顶点,对每个局面和它的子局面连一条有向边来抽象成这个"有向图游戏".下面我们就在有向无环 ...
- ant property file刷新不及时
一.问题 ant脚本定义file的property,有时往里面写了新的值,去访问时还是旧的值 二.原因分析 应该是已定义的file property,后续更新其值的时候,ant的内存缓存没有及时更新, ...
- JMeter各个基础组件简介
刚从LoadRunner转到JMeter,对JMeter的各种概念比较懵.在这里记录下.欢迎大家关注我的个人微信号:测试杂货铺. JMeter的各个功能都是它的组件来完成或实现的,下面来对JMeter ...
- yocto-sumo源码解析(七): BitBakeServer
1. 创建域套接字,管道以及锁: self.configuration = configuration self.featureset = featureset self.sockname = soc ...
- kubernetes集群部署mysql 8.0
参考:https://blog.csdn.net/sealir/article/details/81177747?utm_source=blogxgwz1 集群内安装mysql并添加相应存储(PVC) ...
- 高可用OpenStack(Queen版)集群-17.一些问题
参考文档: Install-guide:https://docs.openstack.org/install-guide/ OpenStack High Availability Guide:http ...
- RHEL7 利用单个物理网卡实现VLAN
使用nmcli创建网桥配置 #nmcli connection add type bridge con-name br0 stp no 使用nmcli创建VLAN设备配置 #nmcli connect ...
- java之接口开发-初级篇
简述:转眼之间已经开发java有五年之余了,从以前的刚刚接触电脑,到现在的公司上班,真是转眼之间呀!前两年开发过前端,后台和Android,Android火的那几年,差点转去做Android,哈哈!后 ...
- 《The Mythical Man-Month(人月神话)》读后感(2)
第10章 未雨绸缪 在化学领域中,在实验室可以进行的反应过程,并不能在工厂中一步实现.一个被称为“ 实验性工厂(pilot planet)”的中间步骤是非常必要的,它会为提高产量和在缺乏保护的环境下运 ...
- wf4 FlowChart 理解
1. 工作流是异步的,所以需要信号. 2. 需要创建 NativeActivity<T> 与整个FlowChart交互. 它的返回值 Result 正确含义是 该 Activity处理之后 ...