thinkphp备份数据库的方法分享
2023-06-13 09:15:39 时间
貌似THINKPHP没有备份数据库的方法,所以我自己写了一个,数据库连接和事务处理用的是pdo,如果有需要的可以联系我,写个mysql或者mysqli的
<?php
classSqlActionextendsAction{
functionoutsql(){
header(“Content-Type:text/html;charset=utf-8″);
/*用C方法读取数据库配置*/
$host=C(‘DB_HOST");
$db_name=C(‘DB_NAME");
$user=C(‘DB_USER");
$password=C(‘DB_PWD");
/*调用导出数据库的私有方法*/
$outstream=$this->outputSql($host,$dbname,$user,$password);
/*下载导出数据库*/
header(“Content-Disposition:attachment;filename=$dbname.sql”);
echo$outstream;
}
/*
*数据库导出函数outputSql
*用PDO方式导出数据库数据
*$host主机名如localhost
*$dbname数据库名
*$user用户名
*$password密码
*$flag标志位0或10为仅导出数据库结构1为导出数据库结构和数据默认为1
*/
privatefunctionoutputSql($host,$dbname,$user,$password,$flag=1){
try{
$pdo=newPDO(“mysql:host=$host;dbname=$dbname”,$user,$password);//连接数据库
$pdo->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);//设置调优参数,遇到错误抛出异常
}catch(PDOException$e){
echo$e->getMessage();//如果连接异常则抛出错误信息
exit;
}
$mysql=“DROPDATABASEIFEXISTS`$dbname`;\n”;//$mysql装载sql语句,这里如果存在数据库则drop该数据库
$creat_db=$pdo->query(“showcreatedatabase$dbname”)->fetch();//用showcreatedatabase查看sql语句
preg_match(‘/DEFAULTCHARACTERSET(.*)\*/",$creat_db[‘CreateDatabase"],$matches);//正则取出DEFAULTCHARACTERSET后面的字符集
$mysql.=”CREATEDATABASE`$dbname`DEFAULTCHARACTERSET$matches[1]”;//该语句如CREATEDATABASE`test_db`DEFAULTCHARACTERSETutf8
/*查找该数据库的字符整序如COLLATEutf8_general_ci*/
$db_collate=$pdo->query(“SELECTDEFAULT_COLLATION_NAMEFROMinformation_schema.SCHEMATAWHERESCHEMA_NAME="$dbname"LIMIT1″)->fetch();
$mysql.=”COLLATE“.$db_collate[‘DEFAULT_COLLATION_NAME"].”;\nUSE`$dbname`;\n\n”;
$statments=$pdo->query(“showtables”);//返回结果集,showtables检视所有表名
foreach($statmentsas$value){//遍历此结果集,导出每个表名对应的信息
$table_name=$value[0];//获取该表名
$mysql.=”DROPTABLEIFEXISTS`$table_name`;\n”;//每个表前都准备Drop语句
$table_query=$pdo->query(“showcreatetable`$table_name`”);//取出该表建表信息的结果集
$create_sql=$table_query->fetch();//利用fetch方法取出该结果集对应的数组
$mysql.=$create_sql[‘CreateTable"].“;\r\n\r\n”;//写入建表信息
if($flag!=0){//如果标志位不是0则继续取出该表内容生成insert语句
$iteams_query=$pdo->query(“select*from`$table_name`”);//取出该表所有字段结果集
$values=“”;//准备空字符串装载insertvalue值
$items=“”;//准备空字符串装载该表字段名
while($item_query=$iteams_query->fetch(PDO::FETCH_ASSOC)){//用关联查询方式返回表中字段名和值的数组
$item_names=array_keys($item_query);//取出该数组键值即字段名
$item_names=array_map(“addslashes”,$item_names);//将特殊字符转译加\
$items=join(‘`,`",$item_names);//联合字段名如:items1`,`item2`符号为反引号键盘1旁边字段名用反引号括起
$item_values=array_values($item_query);//取出该数组值即字段对应的值
$item_values=array_map(“addslashes”,$item_values);//将特殊字符转译加\
$value_string=join(“‘,"”,$item_values);//联合值如:value1′,"value2值用单引号括起
$value_string=“(‘”.$value_string.“‘),”;//值两边加括号
$values.=”\n”.$value_string;//最后返回给$value
}
if($values!=“”){//如果$values不为空,即该表有内容
//写入insert语句
$insert_sql=“INSERTINTO`$table_name`(`$items`)VALUES”.rtrim($values,“,”).“;\n\r”;
//将该语句写入$mysql
$mysql.=$insert_sql;
}
}
}
return$mysql;
}
}
?>
是不是很实用的功能呢,小伙伴们可以直接移植到自己的项目中去的。
相关文章
- SQLServer 错误 14420 日志传送主数据库 %s.%s 的备份阈值为 %d 分钟,在过去的 %d 分钟之内未执行备份日志操作。 请查看代理日志和日志传送监视器信息。 故障 处理 修复 支持远程
- 快速实现SQL Server数据库恢复备份
- SQL SERVER备份数据库存储过程的方法
- MSSQL 2008 自动备份数据库的设置方法
- 实现mysql数据库备份的方法(c备份mysql数据库)
- MySQL数据库备份:5种实用方法(mysql数据库备份方法)
- Oracle数据库备份软件-提升数据安全保障。(oracle数据库备份软件)
- Oracle数据库:实现安全备份的最佳方法(oracle数据备份方法)
- 备份Oracle数据库:视图记录(oracle视图备份)
- 查看Oracle数据库进程的简单方法(查询oracle进程数)
- Oracle数据库备份:保证数据安全可靠的技巧与方法(oracle备份数据库)
- Oracle数据库增量备份脚本使用详解(oracle增量备份脚本)
- MySQL高效备份数据库结构的正确方法(mysql备份数据库结构)
- 定时保障 Oracle 数据库安全可靠性(oracle数据库定时备份)
- 移动云环境下Redis数据库的手动备份实践(移动云数据库redis手动备份)
- NBU备份Oracle数据库的常见方法(nbu备份 oracle)
- MySQL数据库备份方法总结(mysql下的文件备份)
- 文件备份和恢复 Oracle 数据库之DMP文件(oracle 中 dmp)
- Oracle 10数据库备份安全保障之道(oracle10备份工具)
- Linux每天自动备份mysql数据库的方法
- MySQL自动备份与数据库被破坏后的恢复方法
- Mysql数据库常用备份方法和注意事项
- SQLServer2005/2008用户数据库文件默认路径和默认备份路径修改方法
- SQLServer数据库备份和还原认识和总结(一)
- UbuntuServer下MySql数据库备份脚本代码
- mysql数据库备份设置延时备份方法(mysql主从配置)