ThinkPHP框架实现的MySQL数据库备份功能示例
内容导读
收集整理的这篇技术教程文章主要介绍了ThinkPHP框架实现的MySQL数据库备份功能示例,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4472字,纯文字阅读大概需要7分钟。
内容图文
这篇文章主要介绍了ThinkPHP框架实现的MySQL数据库备份功能,结合实例形式分析了thinkPHP导出mysql数据库相关操作实现与使用技巧,需要的朋友可以参考下本文实例讲述了ThinkPHP框架实现的MySQL数据库备份功能。分享给大家供大家参考,具体如下:
1、缘由
自从2010年开始试用ThinkPHP以来,的确带来了许多方便。的确给我带来了许多方便。此次应为数据频繁备份需要,而每次远程连接到服务器颇为不便。变萌生了写个ThinkPHP数据库备份SQL生成类的念头。
2、介绍
由于在数据库中有使用触发器。因此也需要一并备份。并且为了插入数据的时候不会受到触发器影响而破坏先前插入的数据,在插入数据之前生成了删除触发器的代码。 本类并不能生成数据表的创建和删除代码,因此在使用中请注意保证两端表结构的一致。
做WEB开发,一直以来,都采用 Navicat For Mysql 将本地数据库同步到服务器上。前些天,突然心血来潮,将本地数据库升级到了 Mysql 5.5版本,再次将数据同步的时候却发生了错误。想起之前写过的 ThinkPHP 实现Mysql数据库备份 只有备份数据的功能,而没有导出表结构的功能。于是想到了升级一下。让其更完整。
本次升级 增加了 备份表结构、视图功能。导出数据增加了类型判断,insert 语句当字段为空的时候会输出 NULL,当为数字 的时候则不会带上 单引号。
<?php/** * 描述:基于ThinkPHP框架的Mysql数据库导出类 * 日期:2012-07-15 * 作者:龚辟愚 */class DBExport{ /** * @description 获取当前数据库的所有表名。 * @static * @return array */ static protected function getTables() { $dbName=C('DB_NAME'); $result=M()->query("SHOW FULL TABLES FROM `{$dbName}` WHERE Table_Type = 'BASE TABLE'"); foreach ($result as $v){ $tbArray[]=$v['Tables_in_'.C('DB_NAME')]; } return $tbArray; } static protected function getViews() { $dbName=C('DB_NAME'); $result=M()->query("SHOW FULL TABLES FROM `{$dbName}` WHERE Table_Type = 'VIEW'"); foreach ($result as $v){ $tbArray[]=$v['Tables_in_'.C('DB_NAME')]; } return $tbArray; } /** * @description 导出SQL数据,但不包含表创建代码。 * @static * @return string */ static public function ExportAllData() { $tables = self::getTables(); $arrAll = array( "SET FOREIGN_KEY_CHECKS=0;", self::BuildAllTriggerDropSql(), self::BuildTableSql(), self::BuildViewSql() ); $tbl = new Model(); foreach($tables as $table) { $arrAll[]="rnDELETE FROM {$table};"; /* $rs = $tbl->query("SHOW COLUMNS FROM {$table}"); $arrFields = array(); foreach ($rs as $k=>&$v){ $arrFields[] = "`{$v['Field']}`"; } $sqlFields = implode($arrFields,","); */ $rs=$tbl->query("select * from `{$table}`"); foreach ($rs as $k=>&$v){ $arrValues = array(); foreach($v as $key=>$val) { if(is_numeric($val)){ $arrValues[]=$val; }else if(is_null($val)){ $arrValues[]='NULL'; }else{ $arrValues[]="'".addslashes($val)."'"; } } $arrAll[] = "INSERT INTO `{$table}` VALUES (".implode(',',$arrValues).");"; } } $arrAll[]=self::BuildTriggerCreateSql(); return implode("rn",$arrAll); } static protected function BuildTableSql() { $tables = self::getTables(); $arrAll = array(); foreach($tables as &$val){ $rs = M()->query("SHOW CREATE TABLE `{$val}`"); $tbSql = preg_replace("#CREATE(.*)\s+TABLE#","CREATE TABLE",$rs[0]['Create Table']); $arrAll[] = "DROP TABLE IF EXISTS `{$rs[0]['Table']}`;rn{$tbSql};rn"; } return implode("rn",$arrAll); } static protected function BuildViewSql() { $views = self::getViews(); $arrAll = array(); foreach($views as &$val){ $rs = M()->query("SHOW CREATE VIEW `{$val}`"); $tbSql = preg_replace("#CREATE(.*)\s+VIEW#","CREATE VIEW",$rs[0]['Create View']); $arrAll[] = "DROP VIEW IF EXISTS `{$rs[0]['View']}`;rn{$tbSql};rn"; } return implode("rn",$arrAll); } /** * @description 如果存在触发器,生成删除代码。原因是:插入数据的时候可能会受到触发器影响。 * @static * @return string */ static public function BuildAllTriggerDropSql() { $rs = M()->query("show triggers"); $arrAll = array(); foreach ($rs as $k=>&$v) { $arrSql = array( 'DROP TRIGGER IF EXISTS `',$v['Trigger'],'`;' ); $arrAll[] = implode('',$arrSql); } return implode("rn",$arrAll); } /** * @description 生成所有触发器的创建代码。 * @static * @return string */ static protected function BuildTriggerCreateSql() { $rs = M()->query("show triggers"); $arrAll = array(); foreach ($rs as $k=>&$v) { $arrSql = array( 'CREATE TRIGGER `',$v['Trigger'],'` ',$v['Timing'],' ',$v['Event'],' ON `', $v['Table'],'` FOR EACH ROW ',$v['Statement'],';' ); $arrAll[] = implode('',$arrSql); } return implode("rn",$arrAll); }}
调用示例:
vendor('DBExport',COMMON_PATH);header('Content-type: text/plain; charset=UTF-8');$dbName = C('DB_NAME');header("Content-Disposition: attachment; filename="{$dbName}.sql"");echo DBExport::ExportAllData()
您可能感兴趣的文章:
通过PHP实现微信小程序人脸识别刷脸登录功能
PHP实现防止表单重复提交功能【基于token验证】
tp框架(thinkPHP)实现三次登陆密码错误之后锁定账号功能示例
以上就是ThinkPHP框架实现的MySQL数据库备份功能示例的详细内容,更多请关注Gxl网其它相关文章!
内容总结
以上是为您收集整理的ThinkPHP框架实现的MySQL数据库备份功能示例全部内容,希望文章能够帮你解决ThinkPHP框架实现的MySQL数据库备份功能示例所遇到的程序开发问题。 如果觉得技术教程内容还不错,欢迎将网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。