实现数据的导入导出,数据表结构的导入导出
********************************************************/
//
//包含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]
http://www.bkjia.com/phpjc/444994.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/444994.htmltecharticle实现 数据 的导入导出,数据表结构的导入导出 ********************************************************/ // //包含mysql 数据库 操作文件 // require_once(mysql...