-
- class dbBackup {
- public $host='localhost'; //数据库地址
- public $user='root'; //登录名
- public $pwd=''; //密码
- public $database; //数据库名
- public $charset='utf8'; //数据库连接编码:mysql_set_charset
- }
复制代码
二、添加数据库连接function。
-
- /**
- * 连接数据库 ...
- */
- function db() {
- $con = mysql_connect($this->host,$this->user,$this->pwd);
- if (!$con){
- die('Could not connect');
- }
-
- $db_selected = mysql_select_db($this->database, $con);
- if (!$db_selected) {
- die('Can\'t use select db');
- }
-
- mysql_set_charset($this->charset); //设置编码
-
- return $con;
- }
复制代码
三、查询数据库表集合
-
- /**
- * 表集合 ...
- */
- function tblist() {
- $list=array();
-
- $rs=mysql_query("SHOW TABLES FROM $this->database");
- while ($temp=mysql_fetch_row($rs)) {
- $list[]=$temp[0];
- }
-
- return $list;
- }
复制代码
四、查询表结构
-
-
/**
- * 表结构SQL ...
- */
- function sqlcreate() {
- $sql='';
-
- $tb=$this->tblist();
- foreach ($tb as $v) {
- $rs=mysql_query("SHOW CREATE TABLE $v");
- $temp=mysql_fetch_row($rs);
- $sql.="-- 表的结构:{$temp[0]} --\r\n";
- $sql.="{$temp[1]}";
- $sql.=";-- --\r\n\r\n";
- }
return $sql;
- }
-
复制代码
注:$sql.=";-- --\r\n\r\n"; 每句SQL后面必须加上分号(;)分割,MYSQL导入才能识别。-- -- 是程序对SQL语句分割的标识,可以自定义但必须是注释语句,否则影响SQL语句。\r\n无实际意义用于文本美观。
五、INSERT INTO语句
-
- /**
- * 数据插入SQL ...
- */
- function sqlinsert() {
- $sql='';
-
- $tb=$this->tblist();
- foreach ($tb as $v) {
- $rs=mysql_query("SELECT * FROM $v");
- if (!mysql_num_rows($rs)) {//无数据返回
- continue;
- }
- $sql.="-- 表的数据:$v --\r\n";
- $sql.="INSERT INTO `$v` VALUES\r\n";
- while ($temp=mysql_fetch_row($rs)) {
- $sql.='(';
- foreach ($temp as $v2) {
- if ($v2===null) {
- $sql.="NULL,";
- }
- else {
- $v2=mysql_real_escape_string($v2);
- $sql.="'$v2',";
- }
- }
- $sql=mb_substr($sql, 0, -1);
- $sql.="),\r\n";
- }
- $sql=mb_substr($sql, 0, -3);
- $sql.=";-- --\r\n\r\n";
- }
-
- return $sql;
- }
-
复制代码
注意事项:
1.无数据返回时必须跳出本次循环,避免生成多余代码
2.当字段值为(NULL)时,插入字符为(NULL)而不是('NULL'),没有单引号。
3.$v2=mysql_real_escape_string($v2),这是必要的转义
4.mb_substr($sql, 0, -1)、mb_substr($sql, 0, -3),必须去除最后一个逗号(,) 否则SQL语句出错
5.$sql.=";-- --\r\n\r\n",详见第四步注
六、备份操作
-
- /**
- * 备份 ...
- * @param $filename 文件路径
- */
- function beifen($filename) {
- $this->db(); //连接数据库
-
- $sql=$this->sqlcreate();
- $sql2=$this->sqlinsert();
- $data=$sql.$sql2;
-
- return file_put_contents($filename, $data);
- }
复制代码
七、还原操作
-
- /**
- * 还原 ...
- * @param $filename 文件路径
- */
- function huanyuan($filename) {
- $this->db(); //连接数据库
-
- //删除数据表
- $list=$this->tblist();
- $tb='';
- foreach ($list as $v) {
- $tb.="`$v`,";
- }
- $tb=mb_substr($tb, 0, -1);
- if ($tb) {
- $rs=mysql_query("DROP TABLE $tb");
- if ($rs===false) {
- return false;
- }
- }
-
- //执行SQL
- $str=file_get_contents($filename);
- $arr=explode('-- --', $str);
- array_pop($arr);
-
- foreach ($arr as $v) {
- $rs=mysql_query($v);
- if ($rs===false) {
- return false;
- }
- }
-
- return true;
- }
复制代码
来看下调用示例。
1,备份示例:
-
- $x=new dbBackup();
- $x->database='test';
- $rs=$x->beifen('db.sql');
- var_dump($rs);
复制代码
2,还原示例:
-
- $x=new dbBackup();
- $x->database='test';
- $rs=$x->huanyuan('db.sql');
- var_dump($rs);
复制代码
完整代码:
-
-
/**
- * php实现mysql备份与还原
- * 整理 程序员之家 bbs.it-home.org
- */
- class dbBackup {
- public $host='localhost'; //数据库地址
- public $user='root'; //登录名
- public $pwd=''; //密码
- public $database; //数据库名
- public $charset='utf8'; //数据库连接编码:mysql_set_charset
-
- /**
- * 备份 ...
- * @param $filename 文件路径
- */
- function beifen($filename) {
- $this->db(); //连接数据库
-
- $sql=$this->sqlcreate();
- $sql2=$this->sqlinsert();
- $data=$sql.$sql2;
-
- return file_put_contents($filename, $data);
- }
-
- /**
- * 还原 ...
- * @param $filename 文件路径
- */
- function huanyuan($filename) {
- $this->db(); //连接数据库
-
- //删除数据表
- $list=$this->tblist();
- $tb='';
- foreach ($list as $v) {
- $tb.="`$v`,";
- }
- $tb=mb_substr($tb, 0, -1);
- if ($tb) {
- $rs=mysql_query("DROP TABLE $tb");
- if ($rs===false) {
- return false;
- }
- }
-
- //执行SQL
- $str=file_get_contents($filename);
- $arr=explode('-- --', $str);
- array_pop($arr);
-
- foreach ($arr as $v) {
- $rs=mysql_query($v);
- if ($rs===false) {
- return false;
- }
- }
-
- return true;
- }
-
- /**
- * 连接数据库 ...
- */
- function db() {
- $con = mysql_connect($this->host,$this->user,$this->pwd);
- if (!$con){
- die('Could not connect');
- }
-
- $db_selected = mysql_select_db($this->database, $con);
- if (!$db_selected) {
- die('Can\'t use select db');
- }
-
- mysql_set_charset($this->charset); //设置编码
-
- return $con;
- }
-
- /**
- * 表集合 ...
- */
- function tblist() {
- $list=array();
-
- $rs=mysql_query("SHOW TABLES FROM $this->database");
- while ($temp=mysql_fetch_row($rs)) {
- $list[]=$temp[0];
- }
-
- return $list;
- }
-
- /**
- * 表结构SQL ...
- */
- function sqlcreate() {
- $sql='';
-
- $tb=$this->tblist();
- foreach ($tb as $v) {
- $rs=mysql_query("SHOW CREATE TABLE $v");
- $temp=mysql_fetch_row($rs);
- $sql.="-- 表的结构:{$temp[0]} --\r\n";
- $sql.="{$temp[1]}";
- $sql.=";-- --\r\n\r\n";
- }
return $sql;
- }
-
- /**
- * 数据插入SQL ...
- */
- function sqlinsert() {
- $sql='';
-
- $tb=$this->tblist();
- foreach ($tb as $v) {
- $rs=mysql_query("SELECT * FROM $v");
- if (!mysql_num_rows($rs)) {//无数据返回
- continue;
- }
- $sql.="-- 表的数据:$v --\r\n";
- $sql.="INSERT INTO `$v` VALUES\r\n";
- while ($temp=mysql_fetch_row($rs)) {
- $sql.='(';
- foreach ($temp as $v2) {
- if ($v2===null) {
- $sql.="NULL,";
- }
- else {
- $v2=mysql_real_escape_string($v2);
- $sql.="'$v2',";
- }
- }
- $sql=mb_substr($sql, 0, -1);
- $sql.="),\r\n";
- }
- $sql=mb_substr($sql, 0, -3);
- $sql.=";-- --\r\n\r\n";
- }
-
- return $sql;
- }
- }
//备份
- //$x=new dbBackup();
- //$x->database='test';
- //$rs=$x->beifen('db.sql');
- //var_dump($rs);
//还原
- //$x=new dbBackup();
- //$x->database='test';
- //$rs=$x->huanyuan('db.sql');
- //var_dump($rs);
- ?>
复制代码
您可能感兴趣的文章:
php数据库备份类 分享一个不错的php数据库备份类
php完整备份数据库与备份数据库中指定表的类
php mysql数据库备份类及调用方法
php实现mysql的备份与还原实例代码
php mysql备份的代码(xml应用)
php数据备份:单表备份 整表备份 导入数据库
|