<?php //只有DbBak才能调用这个类 class TableBak{ var $_mysql_link_id; var $_dbDir; //private $_DbManager; function TableBak($mysql_link_id,$dbDir) { $this->_mysql_link_id = $mysql_link_id; $this->_dbDir = $dbDir; }
function backupTable($tableName) { //step1:创建表的备份目录名: $tableDir = $this->_dbDir.DIRECTORY_SEPARATOR.$tableName; !is_dir($tableDir) && mkdir($tableDir); //step2:开始备份: $this->_backupTable($tableName,$tableDir); }
function restoreTable($tableName,$tableBakFile) { set_time_limit(0); $fileArray = @file($tableBakFile) or die("can open file $tableBakFile"); $num = count($fileArray); mysql_unbuffered_query("DELETE FROM $tableName"); $sql = $fileArray[0]; for ($i=1;$i<$num-1;$i++){ mysql_unbuffered_query($sql.$fileArray[$i]) or (die (mysql_error())); } return true; }
function _getFieldInfo($tableName){ $fieldInfo = array(); $sql="SELECT * FROM $tableName LIMIT 1"; $result = mysql_query($sql,$this->_mysql_link_id); $num_field=mysql_num_fields($result); for($i=0;$i<$num_field;$i++){ $field_name=mysql_field_name($result,$i); $field_type=mysql_field_type($result,$i); $fieldInfo[$field_name] = $field_type; } mysql_free_result($result); return $fieldInfo; } function _quoteRow($fieldInfo,$row){ foreach ($row as $field_name=>$field_value){ $field_value=strval($field_value); switch($fieldInfo[$field_name]){ case "blob": $row[$field_name] = "'".mysql_escape_string($field_value)."'";break; case "string": $row[$field_name] = "'".mysql_escape_string($field_value)."'";break; case "date": $row[$field_name] = "'".mysql_escape_string($field_value)."'";break; case "datetime": $row[$field_name] = "'".mysql_escape_string($field_value)."'";break; case "time": $row[$field_name] = "'".mysql_escape_string($field_value)."'";break; case "unknown": $row[$field_name] = "'".mysql_escape_string($field_value)."'";break; case "int": $row[$field_name] = intval($field_value); break; case "real": $row[$field_name] = intval($field_value); break; case "timestamp":$row[$field_name] = intval($field_value); break; default: $row[$field_name] = intval($field_value); break; } } return $row; } function _backupTable($tableName,$tableDir) { //取得表的字段类型: $fieldInfo = $this->_getFieldInfo($tableName);
//step1:构造INSERT语句前半部分 并写入文件: $fields = array_keys($fieldInfo); $fields = implode(',',$fields); $sqltext="INSERT INTO $tableName($fields)VALUES rn"; $datafile = $tableDir.DIRECTORY_SEPARATOR.$tableName.'.sql'; (!$handle = fopen($datafile,'w')) && die("can not open file <b>$datafile</b>"); (!fwrite($handle, $sqltext)) && die("can not write data to file <b>$datafile</b>"); fclose($handle);
//step2:取得数据 并写入文件: //取出表资源: set_time_limit(0); $sql = "select * from $tableName"; $result = mysql_query($sql,$this->_mysql_link_id); //打开数据备份文件:$tableName.xml $datafile = $tableDir.DIRECTORY_SEPARATOR.$tableName.'.sql'; (!$handle = fopen($datafile,'a')) && die("can not open file <b>$datafile</b>"); //逐条取得表记录并写入文件: while ($row = mysql_fetch_assoc($result)) { $row = $this->_quoteRow($fieldInfo,$row); $record='(' . implode(',',$row) . ");rn"; (!fwrite($handle, $record)) && die("can not write data to file <b>$datafile</b>"); } mysql_free_result($result); //关闭文件: fclose($handle);
return true; }
} ?>
备份mybbs数据库:
SQL代码 //example 1 backup: require_once('DbBak.php'); require_once('TableBak.php'); $connectid = mysql_connect('localhost','root','123456'); $backupDir = 'data'; $DbBak = new DbBak($connectid,$backupDir); $DbBak->backupDb('mybbs');
恢复mybbs数据库:
复制代码 代码如下: (编辑:焦作站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|