php如何导出数据库,PHP导出数据库方法

(1)定义一个db_dump函数如下:

function db_dump($host,$user,$pwd,$db) {

$mysqlconlink = mysql_connect($host,$user,$pwd , true);

if (!$mysqlconlink)

echo sprintf('No MySQL connection: %s',mysql_error())."
";

mysql_set_charset( 'utf8', $mysqlconlink );

$mysqldblink = mysql_select_db($db,$mysqlconlink);

if (!$mysqldblink)

echo sprintf('No MySQL connection to database: %s',mysql_error())."
";

$tabelstobackup=array();

$result=mysql_query("SHOW TABLES FROM `$db`");

if (!$result)

echo sprintf('Database error %1$s for query %2$s', mysql_error(), "SHOW TABLE STATUS FROM `$db`;")."
";

while ($data = mysql_fetch_row($result)) {

$tabelstobackup[]=$data[0];

}

if (count($tabelstobackup)>0) {

$result=mysql_query("SHOW TABLE STATUS FROM `$db`");

if (!$result)

echo sprintf('Database error %1$s for query %2$s', mysql_error(), "SHOW TABLE STATUS FROM `$db`;")."
";

while ($data = mysql_fetch_assoc($result)) {

$status[$data['Name']]=$data;

}

if ($file = fopen("$db.sql", 'wb')) {

fwrite($file, "-- ---------------------------------------------------------\n");

fwrite($file, "-- Database Name: $db\n");

fwrite($file, "-- ---------------------------------------------------------\n\n");

fwrite($file, "/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;\n");

fwrite($file, "/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;\n");

fwrite($file, "/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;\n");

fwrite($file, "/*!40101 SET NAMES '".mysql_client_encoding()."' */;\n");

fwrite($file, "/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;\n");

fwrite($file, "/*!40103 SET TIME_ZONE='".mysql_result(mysql_query("SELECT @@time_zone"),0)."' */;\n");

fwrite($file, "/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;\n");

fwrite($file, "/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;\n");

fwrite($file, "/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;\n");

fwrite($file, "/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;\n\n");

foreach($tabelstobackup as $table) {

echo sprintf('Dump database table "%s"',$table)."
";

need_free_memory(($status[$table]['Data_length']+$status[$table]['Index_length'])*3);

_db_dump_table($table,$status[$table],$file);

}

fwrite($file, "\n");

fwrite($file, "/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;\n");

fwrite($file, "/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;\n");

fwrite($file, "/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;\n");

fwrite($file, "/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;\n");

fwrite($file, "/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;\n");

fwrite($file, "/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;\n");

fwrite($file, "/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;\n");

fwrite($file, "/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;\n");

fclose($file);

echo 'Database dump done!'."
";

} else {

echo 'Can not create database dump!'."
";

}

} else {

echo 'No tables to dump'."
";

}

}

function _db_dump_table($table,$status,$file) {

fwrite($file, "\n");

fwrite($file, "--\n");

fwrite($file, "-- Table structure for table $table\n");

fwrite($file, "--\n\n");

fwrite($file, "DROP TABLE IF EXISTS `" . $table . "`;\n");

fwrite($file, "/*!40101 SET @saved_cs_client = @@character_set_client */;\n");

fwrite($file, "/*!40101 SET character_set_client = '".mysql_client_encoding()."' */;\n");

$result=mysql_query("SHOW CREATE TABLE `".$table."`");

if (!$result) {

echo sprintf('Database error %1$s for query %2$s', mysql_error(), "SHOW CREATE TABLE `".$table."`")."
";

return false;

}

$tablestruc=mysql_fetch_assoc($result);

fwrite($file, $tablestruc['Create Table'].";\n");

fwrite($file, "/*!40101 SET character_set_client = @saved_cs_client */;\n");

$result=mysql_query("SELECT * FROM `".$table."`");

if (!$result) {

echo sprintf('Database error %1$s for query %2$s', mysql_error(), "SELECT * FROM `".$table."`")."
";

return false;

}

fwrite($file, "--\n");

fwrite($file, "-- Dumping data for table $table\n");

fwrite($file, "--\n\n");

if ($status['Engine']=='MyISAM')

fwrite($file, "/*!40000 ALTER TABLE `".$table."` DISABLE KEYS */;\n");

while ($data = mysql_fetch_assoc($result)) {

$keys = array();

$values = array();

foreach($data as $key => $value) {

if($value === NULL)

$value = "NULL";

elseif($value === "" or $value === false)

$value = "''";

elseif(!is_numeric($value))

$value = "'".mysql_real_escape_string($value)."'";

$values[] = $value;

}

fwrite($file, "INSERT INTO `".$table."` VALUES ( ".implode(", ",$values)." );\n");

}

if ($status['Engine']=='MyISAM')

fwrite($file, "/*!40000 ALTER TABLE ".$table." ENABLE KEYS */;\n");

}

function need_free_memory($memneed) {

if (!function_exists('memory_get_usage'))

return;

$needmemory=@memory_get_usage(true)+inbytes($memneed);

if ($needmemory>inbytes(ini_get('memory_limit'))) {

$newmemory=round($needmemory/1024/1024)+1 .'M';

if ($needmemory>=1073741824)

$newmemory=round($needmemory/1024/1024/1024) .'G';

if ($oldmem=@ini_set('memory_limit', $newmemory))

echo sprintf(__('Memory increased from %1$s to %2$s','backwpup'),$oldmem,@ini_get('memory_limit'))."
";

else

echo sprintf(__('Can not increase memory limit is %1$s','backwpup'),@ini_get('memory_limit'))."
";

}

}

function inbytes($value) {

$multi=strtoupper(substr(trim($value),-1));

$bytes=abs(intval(trim($value)));

if ($multi=='G')

$bytes=$bytes*1024*1024*1024;

if ($multi=='M')

$bytes=$bytes*1024*1024;

if ($multi=='K')

$bytes=$bytes*1024;

return $bytes;

}

?>

(2)使用方法:

db_dump('数据库服务器', '数据库用户名', '数据库密码', '数据库名');

linux导入导出数据库方法 windows导入导出数据库方法

1.使用管理员账号(sys)登录查询字符集信息 第一步:查询LinuxOracle数据库的字符集 select userenv('language') from dual; 查询结果集可能为:AMER ...

plsql developer导入导出数据库方法

导出步骤: 1 tools ->export user object 选择选项,导出.sql文件 2 tools ->export tables-> Oracle Export 选择 ...

PL/SQLDeveloper导入导出Oracle数据库方法

前一篇博客介绍了Navicat工具备份Oracle的方法,这篇博客介绍一下使用PL/SQL Developer工具导入导出Oracle数据库的方法. PL/SQL Developer是Oracle数据 ...

mysql导出数据库几种方法

方法一 cmd 到mysql bin目录下用 如下命令 mysqldump --opt -h192.168.0.156 -uusername -ppassword --skip-lock-tables ...

mysql 导入导出数据库、数据表的方法

mysql 导入导出数据库.数据表的方法. Linux操作系统中,均在控制台下操作.1,导入数据库:前提:数据库和数据表要存在(已经被创建)(1)将数据表 test_user.sql 导入到test ...

PL/SQL Developer导入导出Oracle数据库方法

前一篇博客介绍了Navicat工具备份Oracle的方法.这篇博客介绍一下使用PL/SQL Developer工具导入导出Oracle数据库的方法. PL/SQL Developer是Oracle数据 ...

[mysql] mysqldump 导出数据库表

1.mysqldump的几种常用方法: (1)导出整个数据库(包括数据库中的数据) mysqldump -u username -p dbname > dbname.sql (2)导出数据库结构 ...

随机推荐

Android广播接收器BroadcastRceiver

一.使用BroadcastRceiver 1.创建BroadcastRceiver(MyRceiver),重写OnReceiver: public void onReceive(Context con ...

reflow和repaint(摘录自张鑫旭的翻译)

//正文开始 关于回流(reflows)与重绘(repaints),我已经在twitter和delicious上发布,但是并没有在演讲中提到或是以文章形式发布. 第一次让我开始思考关于回流(reflo ...

包含常用功能的 gulpfile.js

相关包安装 建议使用cnpm npm install --save-dev ***** 其中 ***** 部分表示所需要的包模块,如 gulpfile 中的 require('gulp-useref' ...

Tools:实现vmware虚拟机开机自启动

[来自同事笔记分享] 背景:很多时候宿主机会因为各种原因导致关机或重启,但是里面配置的各个虚拟机不会随宿主机启动而启动,而是需要人为的再去一个一个的操作,无疑会对工作造成一定的影响 因此,正文来了: ...

ECharts中color : function的用法(转)

ECharts图表实战经验1:如何设置图表同序列不同数据点的独立颜色值   最近有不少朋友在追问这样一个问题:我单序列的柱状图,我想让每一个根柱子的颜色都不一样,应该如何做? 针对这个问题,其实我只想 ...

队列ADT

队列 队列是FIFO表,使用队列时在队尾(rear)插入元素,称之为入队(enqueue),以及在对头(front)删除并返回元素值,称之为出队(dequeue). 任何表的实现都可以用于实现队列结构 ...

自定义ListView 、GradView 重写onMeasure方法让其正确显示

1 继承原始的 2 重写onMeasure方法 @Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpe ...

WorldWind源码剖析系列:可渲染对象类RenderableObject

RenderableObject是WorldWind中所有需要渲染的对象的父类,继承了接口IRenderable和Icomparable.其派生类体系如下所示.RenderableObject的成员如 ...

JS实现拖动div层移动

JS实现拖动div层移动 在谈到拖动div层之前,我们有必要来了解下 下面JS几个属性的区别----  pageX,pageY,layerX,layerY,clientX,clientY,screen ...

c++并发编程之创建线程

以boost为例.boost::thread有两个构造函数: (1)thread():构造一个表示当前执行线程的线程对象: (2)explicit thread(const boost::functi ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值