Bookmark and Share

Lee's 程序人生

HTML CSS Javascript XML AJAX ATLAS C# C++ 数据结构 软件工程 设计模式 asp.net Java 数字图象处理 Sql 数据库
  博客园  :: 首页  :: 新随笔  :: 联系 :: 管理

数据库导出类

Posted on 2008-09-24 23:32  analyzer  阅读(631)  评论(0编辑  收藏  举报

转自:http://www.phpchina.com/bbs/thread-59181-1-1.html

本类实现:

  数据库信息导出:word,excel,json,xml,sql
  数据库恢复:从sql,从文件
具体用法:

首先新建测试用数据库mytest,然后在里面建张表

 1 -- 
 2 -- 表的结构 `test`
 3 -- 
 4 CREATE TABLE `test` (
 5   `id` int(11NOT NULL auto_increment,
 6   `name` varchar(100NOT NULL,
 7   `email` varchar(200NOT NULL,
 8   `age` int(3NOT NULL,
 9   PRIMARY KEY  (`id`)
10 ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
11 -- 
12 -- 导出表中的数据 `test`
13 -- 
14 INSERT INTO `test` (`id`, `name`, `email`, `age`) VALUES 
15 (1'pjq518'[email=]'pjq518@126.com'[/email]22),
16 (2'xiaoyu'[email=]'xiaoyu@126.com'[/email]21);
17 

 1.导出ext能方便调用的json

1 $db=new db();
2 echo $db->toExtJson('test');
3 //输出结果为
4 //{'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

 

1 $db=new db();
2 echo $db->toExtXml('test');
3 

 //输出结果

3导出excel和word

1 $db=new db();
2 //toExcel
3 $map=array('No','Name','Email','Age');//表头
4 $db->toExcel('test',$map,'档案');
5 //导出word表格
6 //$db->toWord('test',$map,'档案');

 

 

  1 <?php
  2 class Db
  3 {
  4 var $conn;
  5 function Db($host="localhost",$user="root",$pass="",$db="mytest")
  6 {
  7   if(!$this->conn=mysql_connect($host,$user,$pass))
  8   die("can't connect to mysql sever");
  9   mysql_select_db($db,$this->conn);
 10   mysql_query("SET NAMES 'UTF-8'");
 11 }
 12 function execute($sql)
 13 {
 14    return mysql_query($sql,$this->conn);
 15 }
 16 function findCount($sql)
 17 {
 18     $result=$this->execute($sql);
 19     return mysql_num_rows($result);
 20 }
 21 function findBySql($sql)
 22 {
 23     $array=array();
 24     $result=mysql_query($sql);
 25     $i=0;
 26     while($row=mysql_fetch_assoc($result))
 27        {
 28       $array[$i]=$row
 29    $i++;
 30        }
 31     return $array;
 32 }
 33 //$con的几种情况
 34 //空:返回全部记录
 35 //array:eg. array('id'=>'1') 返回id=1的记录
 36 //string :eg. 'id=1' 返回id=1的记录
 37 function toExtJson($table,$start="0",$limit="10",$cons="")
 38 {
 39    $sql=$this->generateSql($table,$cons);
 40    $totalNum=$this->findCount($sql);
 41    $result=$this->findBySql($sql." LIMIT ".$start." ,".$limit);
 42    $resultNum = count($result);//当前结果数
 43   $str="";
 44   $str.= "{";
 45   $str.= "'totalCount':'$totalNum',";
 46   $str.="'rows':";
 47   $str.="[";
 48   for($i=0;$i<$resultNum;$i++){
 49    $str.="{"
 50    $count=count($result[$i]);
 51    $j=1;
 52    foreach($result[$ias $key=>$val)
 53    {
 54    if($j<$count)
 55    {
 56    $str.="'".$key."':'".$val."',";
 57    }
 58    elseif($j==$count)
 59    {
 60    $str.="'".$key."':'".$val."'";
 61    }
 62    $j++;
 63             }
 64    
 65    $str.="}";
 66    if ($i != $resultNum-1) {
 67              $str.= ",";
 68          }
 69   }
 70   $str.="]";
 71   $str.="}";
 72   return $str;  
 73 }
 74 function generateSql($table,$cons)
 75 {
 76     $sql="";//sql条件
 77    $sql="select * from ".$table;
 78    if($cons!="")
 79    {
 80    if(is_array($cons))
 81    {
 82      $k=0;
 83      foreach($cons as $key=>$val)
 84   {
 85   if($k==0)
 86   {
 87   $sql.="where '";
 88   $sql.=$key;
 89   $sql.="'='";
 90   $sql.=$val."'";
 91   }else
 92   {
 93   $sql.="and '";
 94   $sql.=$key;
 95   $sql.="'='";
 96   $sql.=$val."'";
 97   }
 98   $k++;
 99   }
100    }else
101    {
102    $sql.=" where ".$cons;
103    }
104    }
105    return $sql;
106 }
107 function toExtXml($table,$start="0",$limit="10",$cons="")
108 {
109    $sql=$this->generateSql($table,$cons);
110    $totalNum=$this->findCount($sql);
111    $result=$this->findBySql($sql." LIMIT ".$start." ,".$limit);
112    $resultNum = count($result);//当前结果数
113       header("Content-Type: text/xml");
114    $xml="<?xml version=\"1.0\"  encoding=\"utf-8\" ?>\n";
115    $xml.="<xml>\n";
116    $xml.="\t<totalCount>".$totalNum."</totalCount>\n";
117    $xml.="\t<items>\n";
118    for($i=0;$i<$resultNum;$i++){
119    $xml.="\t\t<item>\n";
120    foreach($result[$ias $key=>$val)
121    $xml.="\t\t\t<".$key.">".$val."</".$key.">\n";
122    $xml.="\t\t</item>\n";
123    }
124     $xml.="\t</items>\n";
125     $xml.="</xml>\n";
126     return $xml;
127 }
128 //输出word表格
129 function toWord($table,$mapping,$fileName)
130 {
131    header('Content-type: application/doc'); 
132       header('Content-Disposition: attachment; filename="'.$fileName.'.doc"'); 
133       echo '<html xmlns:o="urn:schemas-microsoft-com:office:office" 
134        xmlns:w="urn:schemas-microsoft-com:office:word" 
135        xmlns="[url=http://www.w3.org/TR/REC-html40]http://www.w3.org/TR/REC-html40[/url]">
136     <head>
137        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
138     <title>'.$fileName.'</title>
139     </head>
140     <body>'
141     echo'<table border=1><tr>';
142     if(is_array($mapping))
143     {
144       foreach($mapping as $key=>$val)
145    echo'<td>'.$val.'</td>';
146     }
147     echo'</tr>';
148     $results=$this->findBySql('select * from '.$table);
149     foreach($results as $result)
150     {
151       echo'<tr>';
152       foreach($result as $key=>$val)
153    echo'<td>'.$val.'</td>';
154    echo'</tr>';
155     }
156     echo'</table>';
157     echo'</body>';
158     echo'</html>';
159 }
160 function toExcel($table,$mapping,$fileName)
161 {
162   header("Content-type:application/vnd.ms-excel");
163      header("Content-Disposition:filename=".$fileName.".xls");
164   echo'<html xmlns:o="urn:schemas-microsoft-com:office:office"
165        xmlns:x="urn:schemas-microsoft-com:office:excel"
166        xmlns="[url=http://www.w3.org/TR/REC-html40]http://www.w3.org/TR/REC-html40[/url]">
167        <head>
168        <meta http-equiv="expires" content="Mon, 06 Jan 1999 00:00:01 GMT">
169        <meta http-equiv=Content-Type content="text/html; charset=iso-8859-1">
170        <!--[if gte mso 9]><xml>
171        <x:ExcelWorkbook>
172        <x:ExcelWorksheets>
173                <x:ExcelWorksheet>
174                <x:Name></x:Name>
175                <x:WorksheetOptions>
176                        <x:DisplayGridlines/>
177                </x:WorksheetOptions>
178                </x:ExcelWorksheet>
179        </x:ExcelWorksheets>
180        </x:ExcelWorkbook>
181        </xml><![endif]-->
182        </head>
183     <body link=blue vlink=purple leftmargin=0 topmargin=0>'
184     echo'<table width="100%" border="0" cellspacing="0" cellpadding="0">';
185        echo'<tr>';
186     if(is_array($mapping))
187     {
188       foreach($mapping as $key=>$val)
189    echo'<td>'.$val.'</td>';
190     }
191     echo'</tr>';
192     $results=$this->findBySql('select * from '.$table);
193     foreach($results as $result)
194     {
195       echo'<tr>';
196       foreach($result as $key=>$val)
197    echo'<td>'.$val.'</td>';
198    echo'</tr>';
199     }
200     echo'</table>';
201     echo'</body>';
202     echo'</html>';
203 }
204 function Backup($table)
205 {
206   if(is_array ($table))
207   {
208    $str="";
209    foreach($table as $tab)
210    $str.=$this->get_table_content($tab);
211    return $str;
212   }else{
213    return $this->get_table_content($table);
214   }
215 }
216 function Backuptofile($table,$file)
217 {
218   header("Content-disposition: filename=$file.sql");//所保存的文件名
219   header("Content-type: application/octetstream");
220   header("Pragma: no-cache");
221   header("Expires: 0");
222   if(is_array ($table))
223   {
224    $str="";
225    foreach($table as $tab)
226    $str.=$this->get_table_content($tab);
227    echo $str;
228   }else{
229    echo $this->get_table_content($table);
230   }
231 }
232 function Restore($table,$file="",$content="")
233 {
234   //排除file,content都为空或者都不为空的情况
235   if(($file==""&&$content=="")||($file!=""&&$content!=""))
236   echo"参数错误";
237   $this->truncate($table);
238   if($file!="")
239   {
240    if($this->RestoreFromFile($file))
241    return true;
242    else
243    return false;
244   }
245   if($content!="")
246   {
247    if($this->RestoreFromContent($content))
248    return true;
249    else
250    return false;
251   }
252 }
253 //清空表,以便恢复数据
254 function truncate($table)
255 {
256   if(is_array ($table))
257   {
258    $str="";
259    foreach($table as $tab)
260    $this->execute("TRUNCATE TABLE $tab");
261   }else{
262    $this->execute("TRUNCATE TABLE $table");
263   }
264 }
265 function get_table_content($table)
266 {
267   $results=$this->findBySql("select * from $table");
268   $temp = "";
269   $crlf="\r\n";
270   foreach($results as $result)
271   {
272    
273    /*(";
274   foreach($result as $key=>$val)
275   {
276    $schema_insert .= " `".$key."`,";
277   }
278   $schema_insert = ereg_replace(",$", "", $schema_insert);
279   $schema_insert .= ") 
280   */
281   $schema_insert = "INSERT INTO  $table VALUES (";
282   foreach($result as $key=>$val)
283   {
284    if($val != "")
285    $schema_insert .= " '".addslashes($val)."',";
286    else
287    $schema_insert .= "NULL,";
288   }
289   $schema_insert = ereg_replace(",$", "", $schema_insert);
290   $schema_insert .= ");$crlf";
291   $temp = $temp.$schema_insert ;
292   }
293   return $temp;
294 }
295 function RestoreFromFile($file){
296   if (false !== ($fp = fopen($file, 'r'))) {
297    $sql_queries = trim(fread($fp, filesize($file)));
298    $this->splitMySqlFile($pieces, $sql_queries);
299    foreach ($pieces as $query) {
300     if(!$this->execute(trim($query)))
301     return false;
302    }
303    return true;
304   }
305   return false;
306 }
307 function RestoreFromContent($content)
308 {
309   $content = trim($content);
310   $this->splitMySqlFile($pieces, $content);
311   foreach ($pieces as $query) {
312    if(!$this->execute(trim($query)))
313    return false;
314   }
315   return true;
316 }
317 function splitMySqlFile(&$ret, $sql)
318 {
319   $sql= trim($sql);
320   $sql=split(';',$sql);
321   $arr=array();
322   foreach($sql as $sq)
323   {
324     if($sq!="");
325     $arr[]=$sq;
326   }
327   $ret=$arr;
328   return true;
329 }
330 }
331 $db=new db();
332 $map=array('No','Name','Email','Age');
333 //$db->toExcel('test',$map,'档案');
334 echo $db->toExtXml('test');
335 ?>

 

我要啦免费统计