类库,将以下文件放入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框架简易导出数据库的更多相关文章

  1. 用tp框架来对数据库进行增删改

    先来看添加 使用tp框架,对数据库进行添加操作,都有哪些方法 先在Main控制器中,做个方法 运行一下,注意地址,就要输tianjia了 然后再看一下数据库,有没有添加上数据 添加成功 再来看一下这个 ...

  2. tp框架下,数据库和编辑器都是utf-8, 输出中文却还是乱码

    输出: array(2) { [0]=> array(4) { ["id"]=> string(1) "1" ["user"]= ...

  3. tp框架 :操作数据库

    操作数据库,进行增删改数据 一.对数据表添加数据(方法:add()) (1)上一篇已经讲过链接数据库了,继续进行对数据库的操作,还是用控制器文件中的HomeController.class文件 看下数 ...

  4. tp框架中 关于数据库mysql 的一些疑点知识

    mysql创建索引, 通常是在 创建表的 同时/时候, 就创建了 即使是在win下, 用命令行操作数据库 , 也要比 图形界面的鼠标操作快得多 索引的类型有: unique, fulltext索引, ...

  5. tp框架设置 mysql数据库的端口号

    <?php return array( //'配置项'=>'配置值' SHOW_PAGE_TRACE=>true,//开启trace信息 'DB_TYPE' => 'mysql ...

  6. ThinkPhp框架:有条件的数据库查询、tp框架的其他知识

    上一篇的随笔写的是基本操作,现在可以做一些高级操作,例如有条件的查询数据,有分页的条件查询数据 一.一个条件的查询数据 查询数据自然是先要显示出数据,然后根据条件进行查询数据 (1)显示出表的数据 这 ...

  7. .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 ...

  8. tp框架where条件查询数据库

    tp框架where条件查询数据库 Where 条件表达式格式为: $map['字段名'] = array('表达式', '操作条件'); 其中 $map 是一个普通的数组变量,可以根据自己需求而命名. ...

  9. 混合框架中Oracle数据库的还原处理操作

    在较早期的随笔<Oracle如何实现创建数据库.备份数据库及数据导出导入的一条龙操作>粗略介绍了Oracle数据库的备份还原操作,本文想从开发框架的基础上介绍Oracle数据库的脚本或者还 ...

随机推荐

  1. xhprof学习笔记

    一.简介 XHProf 是一个轻量级的分层性能测量分析器. 在数据收集阶段,它跟踪调用次数与测量数据,展示程序动态调用的弧线图. 它在报告.后期处理阶段计算了独占的性能度量,例如运行经过的时间.CPU ...

  2. asp.net mvc4 Html.BeginForm表单提交

    默认是get提交,如果是post提交需要在控制器ActionResult上加:[AcceptVerbs(HttpVerbs.Post)] 举例: 在HelpController中,会定义如下的Acti ...

  3. What is Agile

    Agile is a set of Values, Principles and Practices, that will change your behavior to will create gr ...

  4. 用CMake设置Visual Studio工程中第三方库

    较大的工程文件中一般会调用动态库或者静态库,如果这些库文件是当前工程包含的项目,CMake会自动识别并添加Debug和Release编译时需要的库文件路径和文件名,可以使用命令: Target_Lin ...

  5. Gson运用

    输出对象或者对象的list时,我们一般都是重写toString,和遍历list,但是使用Gson输出对象或者对象的list会非常方便. Gson输出list或者对象.Gson数据没有格式化. impo ...

  6. Setup QT 5.5.1 + OpenCV 3.0 + Visual Studio 2013 on windows 10

    1. Install Visual studio 2013 community version which is free to use for personal usage. 2. Setup th ...

  7. 枚举类valueOf方法的疑问

    枚举类中valueOf方法只有一个参数而Enum类中有两个参数,请问Enum实例类中的valueOf方法是从何处继承而来?   答案:jvm进行编译的时候添加的.

  8. EntityFrameWork 使用时碰到的小问题

    EntityFrameWork 使用时碰到的小问题 1,在使用orm访问数据库的相目里,也要引用EntityFrameWork.dll,否则无法使用orm 否则,编译错误 错误 5 "Sys ...

  9. vc++ 程序开机自启动和取消启动

    //开机启动 int CMainWnd::CreateRun() { //添加以下代码 HKEY hKey; }; //得到程序自身的全路径 DWORD dwRet = GetModuleFileNa ...

  10. Android_Fragment(碎片)知识点讲解

    今天我们来了解下Android 中的fragment(碎片)这个东西. Fragment 从英文翻译而言是碎片,片段的意思.那么这个东西是什么,在Android 中有什么用呢? 一.概念 Fragme ...