十月 24
十月 24th, 2008数据库导出类
Php/MySql/JsExtjs - mysql - php8:54
本类实现:
- 数据库信息导出:word,excel,json,xml,sql
- 数据库恢复:从sql,从文件
具体用法:
首先新建测试用数据库mytest,然后在里面建张表
- --
- -- 表的结构 `test`
- --
- CREATE TABLE `test` (
- `id` int(11) NOT NULL auto_increment,
- `name` varchar(100) NOT NULL,
- `email` varchar(200) NOT NULL,
- `age` int(3) NOT NULL,
- PRIMARY KEY (`id`)
- ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
- --
- -- 导出表中的数据 `test`
- --
- INSERT INTO `test` (`id`, `name`, `email`, `age`) VALUES
- (1, 'pjq518', 'pjq518@126.com', 22),
- (2, 'xiaoyu', 'xiaoyu@126.com', 21);
1.导出ext能方便调用的json
- $db=new db();
- echo $db->toExtJson('test');
- //输出结果为
- //{'totalCount':'2','rows':[{'id':'1','name':'pjq518','email':'pjq518@126.com','age':'22'},{'id':'2','name':'xiaoyu','email':'xiaoyu@126.com','age':'21'}]}
toExtJson($table,$start=”0″,$limit=”10″,$cons=”")有4个参数,$table为表名,$cons为条件,可以为string或array
2.导出xml
- $db=new db();
- echo $db->toExtXml('test');
3.导出excel和word
- <?php
- $db=new db();
- //toExcel
- $map=array('No','Name','Email','Age');//表头
- $db->toExcel('test',$map,'档案');
- //导出word表格
- //$db->toWord('test',$map,'档案');
数据库导出类
下载: Db.class.php
- <?php
- class Db
- {
- var $conn;
- function Db($host="localhost",$user="root",$pass="",$db="mytest")
- {
- if(!$this->conn=mysql_connect($host,$user,$pass))
- die("can't connect to mysql sever");
- mysql_select_db($db,$this->conn);
- mysql_query("SET NAMES 'UTF-8'");
- }
- function execute($sql)
- {
- return mysql_query($sql,$this->conn);
- }
- function findCount($sql)
- {
- $result=$this->execute($sql);
- return mysql_num_rows($result);
- }
- function findBySql($sql)
- {
- $array=array();
- $result=mysql_query($sql);
- $i=0;
- while($row=mysql_fetch_assoc($result))
- {
- $array[$i]=$row;
- $i++;
- }
- return $array;
- }
- //$con的几种情况
- //空:返回全部记录
- //array:eg. array('id'=>'1') 返回id=1的记录
- //string :eg. 'id=1' 返回id=1的记录
- function toExtJson($table,$start="0",$limit="10",$cons="")
- {
- $sql=$this->generateSql($table,$cons);
- $totalNum=$this->findCount($sql);
- $result=$this->findBySql($sql." LIMIT ".$start." ,".$limit);
- $resultNum = count($result);//当前结果数
- $str="";
- $str.= "{";
- $str.= "'totalCount':'$totalNum',";
- $str.="'rows':";
- $str.="[";
- for($i=0;$i<$resultNum;$i++){
- $str.="{";
- $count=count($result[$i]);
- $j=1;
- foreach($result[$i] as $key=>$val)
- {
- if($j<$count)
- {
- $str.="'".$key."':'".$val."',";
- }
- elseif($j==$count)
- {
- $str.="'".$key."':'".$val."'";
- }
- $j++;
- }
- $str.="}";
- if ($i != $resultNum-1) {
- $str.= ",";
- }
- }
- $str.="]";
- $str.="}";
- return $str;
- }
- function generateSql($table,$cons)
- {
- $sql="";//sql条件
- $sql="select * from ".$table;
- if($cons!="")
- {
- if(is_array($cons))
- {
- $k=0;
- foreach($cons as $key=>$val)
- {
- if($k==0)
- {
- $sql.="where '";
- $sql.=$key;
- $sql.="'='";
- $sql.=$val."'";
- }else
- {
- $sql.="and '";
- $sql.=$key;
- $sql.="'='";
- $sql.=$val."'";
- }
- $k++;
- }
- }else
- {
- $sql.=" where ".$cons;
- }
- }
- return $sql;
- }
- function toExtXml($table,$start="0",$limit="10",$cons="")
- {
- $sql=$this->generateSql($table,$cons);
- $totalNum=$this->findCount($sql);
- $result=$this->findBySql($sql." LIMIT ".$start." ,".$limit);
- $resultNum = count($result);//当前结果数
- header("Content-Type: text/xml");
- $xml="<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
- $xml.="<xml>\n";
- $xml.="\t<totalCount>".$totalNum."</totalCount>\n";
- $xml.="\t<items>\n";
- for($i=0;$i<$resultNum;$i++){
- $xml.="\t\t<item>\n";
- foreach($result[$i] as $key=>$val)
- $xml.="\t\t\t<".$key.">".$val."</".$key.">\n";
- $xml.="\t\t</item>\n";
- }
- $xml.="\t</items>\n";
- $xml.="</xml>\n";
- return $xml;
- }
- //输出word表格
- function toWord($table,$mapping,$fileName)
- {
- header('Content-type: application/doc');
- header('Content-Disposition: attachment; filename="'.$fileName.'.doc"');
- echo '<html xmlns:o="urn:schemas-microsoft-com:office:office"
- xmlns:w="urn:schemas-microsoft-com:office:word"
- xmlns="http://www.w3.org/TR/REC-html40">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
- <title>'.$fileName.'</title>
- </head>
- <body>';
- echo'<table border=1><tr>';
- if(is_array($mapping))
- {
- foreach($mapping as $key=>$val)
- echo'<td>'.$val.'</td>';
- }
- echo'</tr>';
- $results=$this->findBySql('select * from '.$table);
- foreach($results as $result)
- {
- echo'<tr>';
- foreach($result as $key=>$val)
- echo'<td>'.$val.'</td>';
- echo'</tr>';
- }
- echo'</table>';
- echo'</body>';
- echo'</html>';
- }
- function toExcel($table,$mapping,$fileName)
- {
- header("Content-type:application/vnd.ms-excel");
- header("Content-Disposition:filename=".$fileName.".xls");
- echo'<html xmlns:o="urn:schemas-microsoft-com:office:office"
- xmlns:x="urn:schemas-microsoft-com:office:excel"
- xmlns="http://www.w3.org/TR/REC-html40">
- <head>
- <meta http-equiv="expires" content="Mon, 06 Jan 1999 00:00:01 GMT">
- <meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
- <!--[if gte mso 9]><xml>
- <x:ExcelWorkbook>
- <x:ExcelWorksheets>
- <x:ExcelWorksheet>
- <x:Name></x:Name>
- <x:WorksheetOptions>
- <x:DisplayGridlines/>
- </x:WorksheetOptions>
- </x:ExcelWorksheet>
- </x:ExcelWorksheets>
- </x:ExcelWorkbook>
- </xml><![endif]-->
- </head>
- <body link=blue vlink=purple leftmargin=0 topmargin=0>';
- echo'<table width="100%" border="0" cellspacing="0" cellpadding="0">';
- echo'<tr>';
- if(is_array($mapping))
- {
- foreach($mapping as $key=>$val)
- echo'<td>'.$val.'</td>';
- }
- echo'</tr>';
- $results=$this->findBySql('select * from '.$table);
- foreach($results as $result)
- {
- echo'<tr>';
- foreach($result as $key=>$val)
- echo'<td>'.$val.'</td>';
- echo'</tr>';
- }
- echo'</table>';
- echo'</body>';
- echo'</html>';
- }
- function Backup($table)
- {
- if(is_array ($table))
- {
- $str="";
- foreach($table as $tab)
- $str.=$this->get_table_content($tab);
- return $str;
- }else{
- return $this->get_table_content($table);
- }
- }
- function Backuptofile($table,$file)
- {
- header("Content-disposition: filename=$file.sql");//所保存的文件名
- header("Content-type: application/octetstream");
- header("Pragma: no-cache");
- header("Expires: 0");
- if(is_array ($table))
- {
- $str="";
- foreach($table as $tab)
- $str.=$this->get_table_content($tab);
- echo $str;
- }else{
- echo $this->get_table_content($table);
- }
- }
- function Restore($table,$file="",$content="")
- {
- //排除file,content都为空或者都不为空的情况
- if(($file==""&&$content=="")||($file!=""&&$content!=""))
- echo"参数错误";
- $this->truncate($table);
- if($file!="")
- {
- if($this->RestoreFromFile($file))
- return true;
- else
- return false;
- }
- if($content!="")
- {
- if($this->RestoreFromContent($content))
- return true;
- else
- return false;
- }
- }
- //清空表,以便恢复数据
- function truncate($table)
- {
- if(is_array ($table))
- {
- $str="";
- foreach($table as $tab)
- $this->execute("TRUNCATE TABLE $tab");
- }else{
- $this->execute("TRUNCATE TABLE $table");
- }
- }
- function get_table_content($table)
- {
- $results=$this->findBySql("select * from $table");
- $temp = "";
- $crlf="\r\n";
- foreach($results as $result)
- {
- /*(";
- foreach($result as $key=>$val)
- {
- $schema_insert .= " `".$key."`,";
- }
- $schema_insert = ereg_replace(",$", "", $schema_insert);
- $schema_insert .= ")
- */
- $schema_insert = "INSERT INTO $table VALUES (";
- foreach($result as $key=>$val)
- {
- if($val != "")
- $schema_insert .= " '".addslashes($val)."',";
- else
- $schema_insert .= "NULL,";
- }
- $schema_insert = ereg_replace(",$", "", $schema_insert);
- $schema_insert .= ");$crlf";
- $temp = $temp.$schema_insert ;
- }
- return $temp;
- }
- function RestoreFromFile($file){
- if (false !== ($fp = fopen($file, 'r'))) {
- $sql_queries = trim(fread($fp, filesize($file)));
- $this->splitMySqlFile($pieces, $sql_queries);
- foreach ($pieces as $query) {
- if(!$this->execute(trim($query)))
- return false;
- }
- return true;
- }
- return false;
- }
- function RestoreFromContent($content)
- {
- $content = trim($content);
- $this->splitMySqlFile($pieces, $content);
- foreach ($pieces as $query) {
- if(!$this->execute(trim($query)))
- return false;
- }
- return true;
- }
- function splitMySqlFile(&$ret, $sql)
- {
- $sql= trim($sql);
- $sql=split(';',$sql);
- $arr=array();
- foreach($sql as $sq)
- {
- if($sq!="");
- $arr[]=$sq;
- }
- $ret=$arr;
- return true;
- }
- }
- $db=new db();
- $map=array('No','Name','Email','Age');
- //$db->toExcel('test',$map,'档案');
- echo $db->toExtXml('test');
- ?>
本站遵循 署名-非商业性使用-相同方式共享 3.0 共享协议,转载请注明作者及出处。

















