实现数据的导入导出,数据表结构的导入导出
********************************************************/
//
//包含mysql数据库操作文件
//
require_once("mysqldb.php");
/*******************************************************
**类 名:mysqldb
**类 编 号:lcq-db-003
**作 用:数据库链接的建立,数据操作,获取字段个数,记录条数等
**作 者:林超旗
**编写日期:(2007-04-07)
********************************************************/
class dbmanagement implements idbmanagement
{
//
//当前数据库中所有的数据表的名字
//
private $tablesname;
//
//默认路径
//
private $defaultpath;
//
//当前要操作的数据库名
//
private $databasename;
//
//操作数据库的对象
//
private $db;
/*******************************************************
**方 法 名:__construct
**功能描述:创建一个dbmanagement的对象
**输入参数:$_databasename-string
** $_defaultpath-string
**输出参数:无
**返 回 值:无
**作 者:林超旗
**日 期:2007-04-09
**修 改 人:
**日 期:
********************************************************/
function __construct($_databasename="",$_defaultpath="")//
{
require("config.inc.php");
if(!$_databasename) {$this->databasename=$dbname;}
else {$this->databasename=$_databasename;}
if(!$_defaultpath) {$this->defaultpath=$defaultpath;}
else {$this->defaultpath=$_defaultpath;}
$path=realpath($this->defaultpath);
$this->defaultpath=str_replace("","/",$path);
//$this->db=new dbfactory();
$this->db=new mysqldb();
}
/*******************************************************
**方 法 名:gettablesname
**功能描述:获取$this->database的所有数据表的名字
**输入参数:无
**输出参数:无
**返 回 值:-array tablesname:$this->database的所有数据表的名字>
**作 者:林超旗
**日 期:2007-04-09
**修 改 人:
**日 期:
********************************************************/
protected function gettablesname()
{
$result=$this->db->query("show table status");
while($row=$this->db->nextrecord($result))
{
$this->tablesname[]=$row["name"];
}
return $this->tablesname;
}
/*******************************************************
**方 法 名:getdatafilename
**功能描述:获取与$this->database的所有数据表对应的数据文件的物理文件名
**输入参数:无
**输出参数:无
**返 回 值:-array database的所有数据表对应的数据文件的物理文件名>
**作 者:林超旗
**日 期:2007-04-09
**修 改 人:
**日 期:
********************************************************/
protected function getdatafilename()
{
$this->gettablesname();
$count=count($this->gettablesname());
for ($i=0;$i {
$datafilesname[]=$this->defaultpath."/".$this->tablesname[$i].".txt";
//echo $datafilesname[$i];
}
return $datafilesname;
}
/*******************************************************
**方 法 名:savetablestructure
**功能描述:保存数据表的结构到install.sql文件中,目标路径为$defaultpath
**输入参数:无
**输出参数:无
**返 回 值:- bool** 为false表示保存失败>
**作 者:林超旗
**日 期:2007-04-09
**修 改 人:
**日 期:
********************************************************/
protected function savetablestructure($text)
{
$filename=$this->defaultpath."/install.sql";
//if(file_exists($filename))
//{
// unlink($filename);
//}
//echo $text;
$fp=fopen($filename,"w+");
fwrite($fp,$text);
}
/*******************************************************
**方 法 名:restoretablestructure
**功能描述:备份$this->database中所有数据表的结构
**输入参数:无
**输出参数:无
**返 回 值:- bool** 为false表示全部或部分数据表的结构备份失败>
**作 者:林超旗
**日 期:2007-04-09
**修 改 人:
**日 期:
********************************************************/
protected function backuptablestructure()
{
$i=0;
$sqltext="";
$this->gettablesname();
$count=count($this->tablesname);
//
//取出所有数据表的结构
//
while($i {
$tablename=$this->tablesname[$i];
$result=$this->db->query("show create table $tablename");
$this->db->nextrecord($result);
//
//取出成生表的sql语句
//
$sqltext.="drop table if exists `".$tablename."`; ";//`
$sqltext.=$this->db->getfield(1)."; ";
$i++;
}
$sqltext=str_replace("r","",$sqltext);
$sqltext=str_replace("n","",$sqltext);
//$sqltext=str_replace("'","`",$sqltext);
$this->savetablestructure($sqltext);
}
/*******************************************************
**方 法 名:restoretablestructure
**功能描述:还原$this->database中所有数据表的结构
**输入参数:无
**输出参数:无
**返 回 值:- bool** 为false表示全部或部分数据表的结构还原失败>
**作 者:林超旗
**日 期:2007-04-09
**修 改 人:
**日 期:
********************************************************/
protected function restoretablestructure()
{
$filename=$this->defaultpath."/install.sql";
if(!file_exists($filename)){echo "找不到表结构文件,请确认你以前做过备份!";exit;}
$fp=fopen($filename,"r");
$sqltext=fread($fp,filesize($filename));
//$sqltext=str_replace("r","",$sqltext);
//$sqltext=str_replace("n","",$sqltext);
$sqlarray=explode("; ",$sqltext);
try
{
$count=count($sqlarray);
//
//数组的最后一个为";",是一个无用的语句,
//
for($i=1;$i {
$sql=$sqlarray[$i-1].";";
$result=$this->db->executesql($sql);
if(!mysql_errno())
{
if($i%2==0){echo "数据表".($i/2)."的结构恢复成功!n";}
}
else
{
if($i%2==0)
{
echo "数据表".($i/2)."的结构恢复失败!n";
exit();
}
}
}
}
catch(exception $e)
{
$this->db->showerror($e->getmessage());
$this->db->close();
return false;
}
}
/*******************************************************
**方 法 名:importdata
**功能描述:导入$this->database中所有数据表的数据从与其同名的.txt文件中,源路径为$defaultpath
**输入参数:无
**输出参数:无
**返 回 值:- bool** 为false表示全部或部分数据表的数据导入失败>
**作 者:林超旗
**日 期:2007-04-09
**修 改 人:
**日 期:
********************************************************/
function importdata()
{
$datafilesname=$this->getdatafilename();
$count=count($this->tablesname);
//$this->db->executesql("set character set gbk");
for ($i=0;$i {
//$datafilesname[$i]=str_replace("","/",$datafilesname[$i])
//echo $datafilesname[$i];
$sqlloaddata="load data infile '".$datafilesname[$i]."' into table ".$this->tablesname[$i];
$sqlcleandata="delete from ".$this->tablesname[$i];
//echo $sql."n";
try
{
//$this->db->executesql("set character set utf8");
//$this->db->executesql("set names 'utf8'");
$this->db->executesql($sqlcleandata);
$this->db->executesql($sqlloaddata);
return true;
//echo "数据导入成功!";
}
catch (exception $e)
{
$this->db->showerror($e->getmessage());
return false;
exit();
}
}
}
/*******************************************************
**方 法 名:exportdata
**功能描述:导出$this->database中所有数据表的数据到与其同名的.txt文件中,目标路径为$defaultpath
**输入参数:无
**输出参数:无
**返 回 值:- bool** 为false表示全部或部分数据表的数据导出失败>
**作 者:林超旗
**日 期:2007-04-09
**修 改 人:
**日 期:
********************************************************/
function exportdata()
{
$datafilesname=$this->getdatafilename();
$count=count($this->tablesname);
try
{
for ($i=0;$i {
$sql="select * from ".$this->tablesname[$i]." into outfile '".$datafilesname[$i]."'";
if(file_exists($datafilesname[$i]))
{
unlink($datafilesname[$i]);
}
//$this->db->executesql("set names 'utf8'");
$this->db->executesql($sql);
}
return true;
//echo "数据导出成功!";
}
catch (exception $e)
{
$this->db->showerror($e->getmessage());
return false;
exit();
}
}
/*******************************************************
**方 法 名:backupdatabase
**功能描述:备份$this->database中所有数据表的结构和数据
**输入参数:无
**输出参数:无
**返 回 值:- bool** 为false表示全部或部分数据表的数据库备份失败>
**作 者:林超旗
**日 期:2007-04-10
**修 改 人:
**日 期:
********************************************************/
function backupdatabase()
{
try
{
$this->backuptablestructure();
$this->exportdata();
return true;
}
catch (exception $e)
{
$this->db->showerror($e->getmessage());
return false;
exit();
}
}
/*******************************************************
**方 法 名:restoredatabase
**功能描述:还原$this->database中所有数据表的结构和数据
**输入参数:无
**输出参数:无
**返 回 值:- bool** 为false表示全部或部分数据表的数据库还原失败>
**作 者:林超旗
**日 期:2007-04-10
**修 改 人:
**日 期:
********************************************************/
function restoredatabase()
{
try
{
$this->restoretablestructure();
$this->importdata();
return true;
}
catch (exception $e)
{
$this->db->showerror($e->getmessage());
return false;
exit();
}
}
}
?>[/php]
Copyright 2014-2024 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号