Tinkphp5,androidndk开发教程

本文详细介绍了如何使用ThinkPHP5进行数据库备份和导入操作。首先讲解了如何创建数据库表并备份数据,包括读取数据、构建SQL语句、写入文件等步骤。接着,展示了如何将SQL文件导入数据库,执行SQL语句恢复数据。通过这些步骤,可以帮助开发者高效地管理和恢复数据库。
摘要由CSDN通过智能技术生成

r e s u l t = D b : : q u e r y ( result=Db::query( result=Db::query(sql);

foreach ($result as k = > k=> k=>v) {

//查询表结构

$table = KaTeX parse error: Expected group after '_' at position 13: v['Tables_in_̲'.dbname];

s q l t a b l e = " s h o w c r e a t e t a b l e " . sql_table = "show create table ". sqltable="showcreatetable".table;

r e s = D b : : q u e r y ( res = Db::query( res=Db::query(sql_table);

$info_table = “-- ----------------------------\r\n”;

i n f o t a b l e . = " − − T a b l e s t r u c t u r e f o r ‘ " . info_table .= "-- Table structure for `". infotable.="Tablestructurefor".table."`\r\n";

$info_table .= “-- ----------------------------\r\n\r\n”;

i n f o t a b l e . = " D R O P T A B L E I F E X I S T S ‘ " . info_table .= "DROP TABLE IF EXISTS `". infotable.="DROPTABLEIFEXISTS".table."`;\r\n\r\n";

$info_table .= $res[0][‘Create Table’].";\r\n\r\n";

//查询表数据

$info_table .= “-- ----------------------------\r\n”;

i n f o t a b l e . = " − − D a t a f o r t h e t a b l e ‘ " . info_table .= "-- Data for the table `". infotable.="Dataforthetable".table."`\r\n";

$info_table .= “-- ----------------------------\r\n\r\n”;

file_put_contents( s a v e p a t h , savepath, savepath,info_table,FILE_APPEND);

s q l d a t a = " s e l e c t ∗ f r o m " . sql_data = "select * from ". sqldata="selectfrom".table;

d a t a = D b : : q u e r y ( data = Db::query( data=Db::query(sql_data);

c o u n t = c o u n t ( count= count( count=count(data);

if($count<1) continue;

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

KaTeX parse error: Expected '}', got 'EOF' at end of input: …"INSERT INTO `{table}` VALUES (";

foreach($value as $column) {

//对单引号和换行符进行一下转义

KaTeX parse error: Can't use function '\r' in math mode at position 34: …ce( array("'","\̲r̲\n"), array("\'…column);

//当值为空时,使用default默认

s q l S t r . = e m p t y ( sqlStr .=empty( sqlStr.=empty(column) ? “default, " : “’”.$column.”’, ";

}

//去掉最后一个逗号和空格

s q l S t r = s u b s t r ( sqlStr = substr( sqlStr=substr(sqlStr,0,strlen($sqlStr)-2);

$sqlStr .= “);\r\n”;

//KaTeX parse error: Expected '}', got 'EOF' at end of input: …"INSERT INTO `{table}` VALUES (’" . str_replace(array("\r", “\n”), array(’\r’, ‘\n’), implode("’, ‘", $value)) . "’);\n";

file_put_contents( s a v e p a t h , savepath, savepath,sqlStr,FILE_APPEND);

}

$info = “\r\n”;

file_put_contents( s a v e p a t h , savepath, savepath,info,FILE_APPEND);

}

//计算文件大小

s i z e = f i l e s i z e ( size=filesize( size=filesize(savepath);

return array(‘code’ => 1, ‘msg’ => ‘数据库备份成功’,‘name’=> f i l e N a m e , ′ s i z e ′ = > fileName,'size'=> fileName,size=>size,‘path’=>$filePath);

}else{

return array(‘code’ => 0, ‘msg’ => ‘备份文件已存在’);

}

} catch (\Exception $e) {

return array(‘code’ => 0, ‘msg’ => ‘备份数据库失败,Error:’.$e);

}

}

/**

  • 将sql文件导入到数据库

  • @param string $sqlfile sql文件

*/

public static function import($sqlfile) {

if(!file_exists($sqlfile)) {

return array(‘code’ => 0, ‘msg’ => ‘备份文件不存在’);

}

try {

// 创建保存sqlsql语句的数组

$sqls = array ();

f i l e = f o p e n ( file = fopen ( file=fopen(sqlfile, “rb” );

// 创建表缓冲变量

$table_buffer = ‘’;

while ( ! feof ($file) ) {

// 读取每一行sql

$row = fgets ( $file);

// 如果结尾没有包含’;’(即为一个完整的sql语句,这里是插入语句),并且不包含’ENGINE=’(即创建表的最后一句)

if (! preg_match ( ‘/;/’, $row ) || preg_match ( ‘/ENGINE=/’, $row )) {

// 将本次sql语句与创建表sql连接存起来

$table_buffer .= $row;

// 如果包含了创建表的最后一句

if (preg_match ( ‘/ENGINE=/’, $table_buffer)) {

//执行sql语句创建表

Db::execute($table_buffer);

// 清空当前,准备下一个表的创建

$table_buffer = ‘’;

}

// 跳过本次

continue;

}

//执行sql语句

Db::execute($row);

}

fclose ($file);

return array(‘code’ => 1, ‘msg’ => ‘还原数据库成功’);

}

catch (\Exception $e) {

return array(‘code’ => 0, ‘msg’ => ‘还原数据库失败,Error:’.$e);

}

}

}

二、创建一张数据库表,用于保存备份内容


– Table structure for database


DROP TABLE IF EXISTS database;

CREATE TABLE database (

id int(11) NOT NULL AUTO_INCREMENT,

name varchar(100) DEFAULT NULL,

size varchar(20) DEFAULT ‘0’,

path varchar(255) DEFAULT NULL,

create_time int(11) DEFAULT NULL,

update_time int(11) DEFAULT NULL,

delete_time int(11) DEFAULT NULL,

PRIMARY KEY (id)

) ENGINE=MyISAM AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;

三、备份数据库

thinkphp后端控制器代码

<?php namespace app\admin\controller; use think\Controller; use think\Db; use app\common\Backup; /** ** @name='备份' */ public function backup() { if(request()->isPost()){ $res=Backup::export(); if($res['code']==1){ //写入数据库 DatabaseModel::create([ 'name' => $res['name'], 'size' => $res['size'], 'path' => $res['path'] ]); $this->success($res['msg']); }else{ $this->error($res['msg']); } } } ### 四、下载备份文件 1、下载数据库备份文件,需要先将.sql文件压缩成zip,因此建议前端配合使用jszip插件,jszip教程参数这篇文章:[https://blog.csdn.net/qq15577969/article/details/115549729]( ) > **Ps**:有的朋友可能会说,直接使用php自带的zip压缩功能不就可以了吗,何必那么麻烦。这个当然也可以,但前提是你使用的php版本安装了php\_zip.dll扩展,然后才 > **《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》** > > **【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整内容开源分享** 能使用ZipArchive类实现zip压缩功能。博主使用的php5.6版本是没有这个扩展的,而且博主开发的系统是要授权给用户使用的,用户不一定都懂安装php扩展,所以为了保险起见,直接选择了配合前端jszip插件来实现压缩的方案。 2、前端js代码: 3、thinkphp后端控制器代码: <?php /** ** @name='下载' */ public function down() { if(request()->isPost()){ $data=input('post.'); !isset($data['id']) && $this->error('参数非法'); !is_numeric(trim($data['id'])) && $this->error('参数非法'); $file = DatabaseModel::field('name,path')->where('id',intval($data['id']))->find(); empty($file) && $this->error('备份数据不存在'); $path=ROOT_PATH.$file['path']; //读取文件 $content=file_get_contents($path); if (!empty($content)) { $arr=[ 'code'=>1, 'name'=>$file['name'], 'content'=>$content ]; header('Content-Type:application/json; charset=utf-8'); echo json_encode($arr, JSON_UNESCAPED_UNICODE); exit; }else{ $this->error('备份文件被损坏'); } } } ### 五、还原备份文件 1、还原数据库需要修改**database.php**里的数据库配置,如下: // 数据库连接参数 'params' => [ 'MYSQL_ATTR_USE_BUFFERED_QUERY' => true, ], 2、thinkphp后端控制器代码: /** ** @name='还原' */ public function recover() { if(request()->isPost()){ $data=input('post.'); !isset($data['id']) && $this->error('参数非法'); !is_numeric(trim($data['id'])) && $this->error('参数非法'); $file = DatabaseModel::field('id,name,path')->where('id',intval($data['id']))->find(); empty($file) && $this->error('备份数据不存在'); //.sql文件的全路径 $path=ROOT_PATH.$file['path'];
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值