thinkphp中怎么备份数据库
作者
thinkphp中怎么备份数据库,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
代码如下:
<?phpclassSqlActionextendsAction{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;}}?>
看完上述内容,你们掌握thinkphp中怎么备份数据库的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注恰卡编程网行业资讯频道,感谢各位的阅读!
目录
推荐阅读
-
如何快速解决ThinkPHP5.1出现MISS缓存未命中问题
如何快速解决ThinkPHP5.1出现MISS缓存未命中问题这篇文...
-
thinkphp 6.0 swoole扩展websocket使用教程
-
PHP之ThinkPHP框架,让你10分钟快速入门,还免费包教会哟
-
ThinkPHP5.0目录结构,作用及其初略说明
-
Thinkphp在IIS7.5里的伪静态代码,亲测,收藏
-
哪些PHP开源作品值得关注
-
开源学校教务管理系统
-
一次项目中Thinkphp绕过禁用函数的实战记录
-
thinkphp如何用中间件记录行为日志
-
thinkphp3.1与3.2的区别有哪些
thinkphp3.1与3.2的区别有哪些今天小编给大家分享一下t...
0 条评论
本站已关闭游客评论,请登录或者注册后再评论吧~