thinkphp 备份类
来源: 阅读:734 次 日期:2014-09-10 10:11:53
温馨提示: 小编为您整理了“thinkphp 备份类”,方便广大网友查阅!

<?php

header('Content-type:text/html; charset=utf-8');

Header("Content-type: application/octet-stream");

header("Content-Disposition:attachment; filename=".date( 'YmdHis ').".sql");

class BakAction extends Action{

/**

*返回数据库中的数据表

*/

protected function getTable(){

$dbName=C('DB_NAME');

$result=M()->query('show tables from '.$dbName);

foreach ($result as $v){

$tbArray[]=$v['Tables_in_'.C('DB_NAME')];

}

return $tbArray;

}

public function index(){

$table=$this->getTable();

$struct=$this->bakStruct($table);

$record=$this->bakRecord($table);

echo $struct;

echo $record;

}

/**

*备份数据表结构

*/

protected function bakStruct($array){

foreach ($array as $v){

$tbName=$v;

$result=M()->query('show columns from '.$tbName);

$sql.="--\r\n";

$sql.="-- 数据表结构: `$tbName`\r\n";

$sql.="--\r\n\r\n";

$sql.="create table `$tbName` (\r\n";

$rsCount=count($result);

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

$field = $v['Field'];

$type = $v['Type'];

$default= $v['Default'];

$extra = $v['Extra'];

$null = $v['Null'];

if(!($default=='')){

$default='default '.$default;

}

if($null=='NO'){

$null='not null';

}else{

$null="null";

}

if($v['Key']=='PRI'){

$key = 'primary key';

}else{

$key = '';

}

if($k<($rsCount-1)){

$sql.="`$field` $type $null $default $key $extra ,\r\n";

}else{

//最后一条不需要","号

$sql.="`$field` $type $null $default $key $extra \r\n";

}

}

$sql.=")engine=innodb charset=utf8;\r\n\r\n";

}

return str_replace(')',')',$sql);

}

/**

*备份数据表数据

*/

protected function bakRecord($array){

foreach ($array as $v){

$tbName=$v;

$rs=M()->query('select * from '.$tbName);

if(count($rs)<=0){

continue;

}

$sql.="--\r\n";

$sql.="-- 数据表中的数据: `$tbName`\r\n";

$sql.="--\r\n\r\n";

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

$sql.="INSERT INTO `$tbName` VALUES (";

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

if($value==''){

$value='null';

}

$type=gettype($value);

if($type=='string'){

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

}

$sql.="$value," ;

}

$sql.=");\r\n\r\n";

}

}

return str_replace(')',')',$sql);

}

}

?>

在做FOMS时需要个数据库备份类,但是在thinkphp官网论坛上面好像没有这个东西,随便弄了个,自我感觉不是很好,只是能用。

该类需要有thinkphp框架支持。

--------------------------------------分割线----------------------------------------

<?php

protected function bakStruct($array)

{

foreach ($array as $v)

{

$tbName = $v;

//$sql.="DROP TABLE IF EXISTS `$v`;\r\n\r\n";

$result = M()->query('SHOW CREATE TABLE ' . $tbName);

$sql .= $result['0']['Create Table'] . ";\r\n\r\n";

}

return str_replace('CREATE TABLE', 'CREATE TABLE IF NOT EXISTS', $sql);

}

?>

更多信息请查看IT技术专栏

更多信息请查看网络编程
上一篇:thinkphp 备份类
手机网站地址:thinkphp 备份类
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!

2025国考·省考课程试听报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map