tp框架简易导出数据库
类库,将以下文件放入vendor文件夹中,命名空间vendor,使用think下的model类
<?php
/**
* 描述:基于ThinkPHP框架的Mysql数据库导出类
* 日期:2012-07-15
* 作者:龚辟愚
*/
namespace Vendor;
use Think\Model;
class DBExport
{
/**
* @description 获取当前数据库的所有表名。
* @static
* @return array
*/
public function t(){
echo "a";
}
static protected function gettables()
{
$dbName=C('DB_NAME'); $result=M()->query("SHOW FULL tableS FROM `{$dbName}` WHERE table_Type = 'BASE table'"); foreach ($result as $v){
$tbArray[]=$v['tables_in_'.C('DB_NAME')];
}
return $tbArray; }
static protected function getViews()
{
$dbName=C('DB_NAME');
$result=M()->query("SHOW FULL tableS FROM `{$dbName}` WHERE table_Type = 'VIEW'"); foreach ($result as $v){
$tbArray[]=$v['tables_in_'.C('DB_NAME')];
}
return $tbArray;
} /**
* @description 导出SQL数据,但不包含表创建代码。
* @static
* @return string
*/
static public function ExportAllData()
{
$tables = self::gettables();
$arrAll = array(
"SET FOREIGN_KEY_CHECKS=0;",
self::BuildAllTriggerDropSql(),
self::BuildtableSql(),
self::BuildViewSql()
);
$tbl = new Model();
foreach($tables as $table)
{
$arrAll[]="\r\nDELETE FROM {$table};"; /*
$rs = $tbl->query("SHOW COLUMNS FROM {$table}");
$arrFields = array();
foreach ($rs as $k=>&$v){
$arrFields[] = "`{$v['Field']}`"; } $sqlFields = implode($arrFields,",");
*/
$rs=$tbl->query("select * from `{$table}`");
foreach ($rs as $k=>&$v){
$arrValues = array();
foreach($v as $key=>$val)
{
if(is_numeric($val)){
$arrValues[]=$val;
}else if(is_null($val)){
$arrValues[]='NULL';
}else{
$arrValues[]="'".addslashes($val)."'";
}
}
$arrAll[] = "INSERT INTO `{$table}` VALUES (".implode(',',$arrValues).");";
}
}
$arrAll[]=self::BuildTriggerCreateSql();
return implode("\r\n",$arrAll);
} static protected function BuildtableSql()
{
$tables = self::gettables();
$arrAll = array();
foreach($tables as &$val){
$rs = M()->query("SHOW CREATE table `{$val}`"); $tbSql = preg_replace("#CREATE(.*)\\s+table#","CREATE table",$rs[0]['Create table']); $arrAll[] = "DROP table IF EXISTS `{$rs[0]['table']}`;\r\n{$tbSql};\r\n";
} return implode("\r\n",$arrAll);
} static protected function BuildViewSql()
{
$views = self::getViews();
$arrAll = array();
foreach($views as &$val){
$rs = M()->query("SHOW CREATE VIEW `{$val}`");
$tbSql = preg_replace("#CREATE(.*)\\s+VIEW#","CREATE VIEW",$rs[0]['Create View']); $arrAll[] = "DROP VIEW IF EXISTS `{$rs[0]['View']}`;\r\n{$tbSql};\r\n";
}
return implode("\r\n",$arrAll);
}
/**
* @description 如果存在触发器,生成删除代码。原因是:插入数据的时候可能会受到触发器影响。
* @static
* @return string
*/
static public function BuildAllTriggerDropSql()
{
$rs = M()->query("show triggers");
$arrAll = array();
foreach ($rs as $k=>&$v)
{
$arrSql = array(
'DROP TRIGGER IF EXISTS `',$v['Trigger'],'`;'
); $arrAll[] = implode('',$arrSql);
}
return implode("\r\n",$arrAll);
} /**
* @description 生成所有触发器的创建代码。
* @static
* @return string
*/
static protected function BuildTriggerCreateSql()
{
$rs = M()->query("show triggers");
$arrAll = array();
foreach ($rs as $k=>&$v)
{
$arrSql = array(
'CREATE TRIGGER `',$v['Trigger'],'` ',$v['Timing'],' ',$v['Event'],' ON `',
$v['table'],'` FOR EACH ROW ',$v['Statement'],';'
); $arrAll[] = implode('',$arrSql);
}
return implode("\r\n",$arrAll);
}
}
//调用方法
public function tiaoshi(){
header('Content-type: text/plain; charset=UTF-8');
$dbName = C('DB_NAME');
header("Content-Disposition: attachment; filename=\"{$dbName}.sql\"");
vendor('DBExport','','.class.php');
echo \vendor\DBExport::ExportAllData();
}
tp框架简易导出数据库的更多相关文章
- 用tp框架来对数据库进行增删改
先来看添加 使用tp框架,对数据库进行添加操作,都有哪些方法 先在Main控制器中,做个方法 运行一下,注意地址,就要输tianjia了 然后再看一下数据库,有没有添加上数据 添加成功 再来看一下这个 ...
- tp框架下,数据库和编辑器都是utf-8, 输出中文却还是乱码
输出: array(2) { [0]=> array(4) { ["id"]=> string(1) "1" ["user"]= ...
- tp框架 :操作数据库
操作数据库,进行增删改数据 一.对数据表添加数据(方法:add()) (1)上一篇已经讲过链接数据库了,继续进行对数据库的操作,还是用控制器文件中的HomeController.class文件 看下数 ...
- tp框架中 关于数据库mysql 的一些疑点知识
mysql创建索引, 通常是在 创建表的 同时/时候, 就创建了 即使是在win下, 用命令行操作数据库 , 也要比 图形界面的鼠标操作快得多 索引的类型有: unique, fulltext索引, ...
- tp框架设置 mysql数据库的端口号
<?php return array( //'配置项'=>'配置值' SHOW_PAGE_TRACE=>true,//开启trace信息 'DB_TYPE' => 'mysql ...
- ThinkPhp框架:有条件的数据库查询、tp框架的其他知识
上一篇的随笔写的是基本操作,现在可以做一些高级操作,例如有条件的查询数据,有分页的条件查询数据 一.一个条件的查询数据 查询数据自然是先要显示出数据,然后根据条件进行查询数据 (1)显示出表的数据 这 ...
- .net mvc 站点自带简易SSL加密传输 Word报告自动生成(例如 导出数据库结构) 微信小程序:动画(Animation) SignalR 设计理念(一) ASP.NET -- WebForm -- ViewState ASP.NET -- 一般处理程序ashx 常用到的一些js方法,记录一下 CryptoJS与C#AES加解密互转
.net mvc 站点自带简易SSL加密传输 因项目需要,传输数据需要加密,因此有了一些经验,现简易抽出来分享! 请求:前端cryptojs用rsa/aes 或 rsa/des加密,后端.net ...
- tp框架where条件查询数据库
tp框架where条件查询数据库 Where 条件表达式格式为: $map['字段名'] = array('表达式', '操作条件'); 其中 $map 是一个普通的数组变量,可以根据自己需求而命名. ...
- 混合框架中Oracle数据库的还原处理操作
在较早期的随笔<Oracle如何实现创建数据库.备份数据库及数据导出导入的一条龙操作>粗略介绍了Oracle数据库的备份还原操作,本文想从开发框架的基础上介绍Oracle数据库的脚本或者还 ...
随机推荐
- VS2013安装
下载 等待下载完成之后,虽然下载文件是ios格式,但可以用解压缩工具解压打开.解压好后,双击vs_ultimate.exe,开始安装. 自定义选择安装路径,同意许可条款,进行下一步. 在选择安装的可选 ...
- SELinux查看、启用、关闭
SELinux查看.启用.关闭 查看SELinux状态: 1./usr/sbin/sestatus -v ##如果SELinux status参数为enabled即为开启状态 SELinux ...
- highcharts 柱状图 动态加载
highcharts柱状图动态加载 (1):导入样式 <script type="text/javascript" src="<%=request.getCo ...
- iOS9中的App Transport Security
问题:webView加载网页加载不出来 原因:苹果在iOS9 sdk中加入了App Transport Security限制(iOS9以前的iOS sdk默认关闭ATS),默认强制使用https,并且 ...
- Easyui表单之下拉列表的三级联动
一.实现三级联动需要连接数据库 二.需要JSON数据的解析 三.需要Servlet类与界面相对应值的传递 1. 界面层需要的代码如下: <!DOCTYPE html> <html&g ...
- 如何写一个简单的shell
如何写一个简单的shell 看完<UNIX环境高级编程>后我就一直想写一个简单的shell来作为练习,因为有事断断续续的写了好几个月,如今写了差不多来总结一下. 源代码放在了Github: ...
- Content has been consumed
if(response.getEntity() != null && response.getEntity().getContent() != null) { message = IO ...
- Perl语言
Perl是高级.通用.直译式.动态的程序语言家族.最初设计者拉里·沃尔(Larry Wall)为了让在UNIX上进行报表处理的工作变得更方便,决定开发一个通用的脚本语言,而在1987年12月18日发表 ...
- MySQL for Windows 解压缩版安装 和 多实例安装
MySQL 5.6 for Windows 解压缩版配置安装 http://jingyan.baidu.com/album/f3ad7d0ffc061a09c3345bf0.html?picindex ...
- LoadRunner --HTML/URL录制方式的选择规则