今天,分享一个利用fputcsv导出数据备份数据的方法,我也时看到些零零散散的代码,想着拼起来,所以我只提供些思路,以及简单的代码,至于怎么组合能够让它更强大,尽情去探索吧

讲之前先上一段获取数据库里面的所有表以及表对应的字段的代码。

获取数据库所有表和字段

  1. $i = 0;
  2. $tables = $db->getAllTables();
  3. foreach ($tables as $key => $value) {
  4. $rooters[$i]['tab'] = $value;
  5. $fields = $db->getAllFields("$value");
  6. foreach ($fields as $k => $v) {
  7. $rooters[$i]['colus'] .= $v['name'].'('.$v['con'].'),';
  8. }
  9. $i++;
  10. }
  11. echo '<pre>';
  12. print_r($rooters);
getAllTables和getAllFields,这两个方法封装到数据库操作类里面即可
  1. /*
  2. * 获取数据库所有的表名
  3. */
  4. static function getAllTables() {
  5. $result = self::query("SHOW TABLES");//执行查询语句
  6. $tables=array();
  7. while($row = mysql_fetch_array($result))
  8. {
  9. $tables[] =$row[0];
  10. }
  11. return $tables;
  12. }
  13. /*
  14. *获取表里对应的字段
  15. */
  16. static function getAllFields($tableName) {
  17. $dbName = self::$dbName;
  18. $result = self::query("select COLUMN_NAME,column_comment from INFORMATION_SCHEMA.Columns where table_name='$tableName' and table_schema='$dbName'");//table_name 换成你对应的表名
  19. $tables=array();
  20. $i = 0;
  21. while($row = mysql_fetch_array($result))
  22. {
  23. $tables[$i]['name'] =$row['COLUMN_NAME'];
  24. $tables[$i]['con'] =$row['column_comment'];
  25. $i++;
  26. }
  27. return $tables;
  28. }
终于进入正题了,简单的把两份代码结合起来,就可以实现导出数据的功能,只需要提供表名即可,但是根据上面获取数据库所有表的代码,再结合一下,就可以实现备份数据库了,代码这里就不写了,下面只是导出某个表的代码。ivutf8()不要认成内置函数了,只是我封装的一个公共方法,就是iconv('utf-8', 'gbk', $v);,看着这么长的代码要写好多遍,我的强迫症就犯了,就封装成公共方法了。
  1. $tableName = isset($_GET['tablename'])&&($_GET['tablename']!=='')?$_GET['tablename']:'xxxx';
  2. $rooters = array();
  3. $fields = $db->getAllFields($tableName);
  4. foreach ($fields as $k => $v) {
  5. $rooters[$k] = $v['name'];
  6. }
  7. $sql = "select * from {$tableName}";
  8. $data = $db->read($sql);
  9. $con = array();
  10. $head = $rooters;
  11. foreach ($head as $i => $v2) {
  12. $con[0] .= ivutf8($v2).',';
  13. }
  14. $con[0] = trim($con[0],' , ');
  15. $str = '';
  16. foreach ($data as $k => $v) {
  17. foreach ($head as $key => $value) {
  18. $str .= ivutf8($v[$value]).",";
  19. }
  20. $con[$k+1] = trim($str,' , ');
  21. $str = '';
  22. }
  23. $file = fopen("{$tableName}.csv","w");
  24. foreach ($con as $line){
  25. fputcsv($file,split(',',$line));
  26. }
  27. fclose($file);
  28. echo '---------------------------SUCCESS---------------------------';
现在给你们说一下我遇到的问题,导出一部分表的时候,很顺利,都能打开,但是有时候导出另一部分表的时候,打开会提示 “您尝试打开的文件xxx.csv的格式与文件扩展名指定的格式不一致.......点击确认后,会提示Excel已检测到xxx.csv是SYLK文件,但是不能将其加载.................”。

这是因为SYLK 文件是一个文本文件,开头的"ID"或"ID_xxxx",其中 xxxx 是文本字符串。 SYLK 文件的第一个的记录是在 ID_Number 记录。 Excel 将识别该文本在文本文件开头时, 它会将该文件解释为 SYLK 文件。 Excel 将尝试从该 SYLK 格式转换该文件,但不能这样做,因为"ID"字符后不有任何有效的 SYLK 代码。 因为 Excel 不能转换该文件,您收到错误消息。

当您打开一个文本文件、 CSV 文件和文件的前两个字符是将大写字母"I","D"时,会发生此问题。

例如文本文件可能包含以下文本:ID, STATUS 123, open 456, closed

如果前两个字母小写"i"和"d"不会发生此问题的 。

解决方案:
若想在 Excel 中打开您的文件,可以在一个文本编辑器中打开该文件,然后插入第一行开头处加一个撇号。
1.在文本编辑器 (如记事本) 中打开文本文件。 单击第一行文字在第一个字符之前。 按撇号键键盘 (') 上。
2.在 文件 菜单中上, 单击 保存 。 退出文本编辑器。 现在可以在 Excel 中打开该文件。

利用fputcsv导出数据备份数据的更多相关文章

  1. mysql数据安全之利用二进制日志mysqlbinlog备份数据

    mysql数据安全之利用二进制日志mysqlbinlog备份数据 简介:如何利用二进制日志来备份数据 什么是二进制日志: 二进制日志就是记录着mysql数据库中的一些写入性操作,比如一些增删改,但是, ...

  2. 利用osmosis导出osm城市数据

    转载(未测试) 方法核心就是利用osmosis的导出指定功能,即是从大范围导出小范围的基本用例. 我们只需要知道我们所需要提取的城市的经纬度范围, 例如广州市的经纬度范围是北纬22.26~23.56度 ...

  3. MySQL(十四)之数据备份与还原

    前言 上一篇分享了关于MySQL事务的知识,在我们数据库中最重要的就是数据了,所以数据的备份就显的特别的重要! 为什么要备份数据? 在生产环境中我们数据库可能会遭遇各种各样的不测从而导致数据丢失, 大 ...

  4. Postgresql 数据库,如何进行数据备份以及导入到另外的数据库

    方法其实有很多种,这里用的方法比较稳妥.之后有时间会补充别的方法. 该方法分为三步:备份数据,新建表结构,导入数据 备份数据:>>\copy table_name to '/home/ba ...

  5. HBase数据备份及恢复(导入导出)的常用方法

    一.说明 随着HBase在重要的商业系统中应用的大量增加,许多企业需要通过对它们的HBase集群建立健壮的备份和故障恢复机制来保证它们的企业(数据)资产.备份Hbase时的难点是其待备份的数据集可能非 ...

  6. mongodb数据导入导出以及备份恢复

    昨日在公司收到游戏方发来一个1G多的数据文件,要求导入联运账号中.细细一看,纳尼!文件竟然是BSON格式. 哇塞,这不是去年给大家分享的NoSql中的MongoDB的备份文件吗? 于是搭好环境 1.启 ...

  7. MongoDB学习(三)数据导入导出及备份恢复

    这几天想着公司要用MongoDB,自然就要用到数据导入导出,就自己学习了一下. 在Mongo学习(二)中就讲到了在bin目录下有一些工具,本篇就是使用这些工具进行数据的导入导出及备份恢复. 注意:以下 ...

  8. oracle中导入导出数据备份数据库

    原文:oracle中导入导出数据备份数据库 数据库所在位置                         将数据导出到的文件名                    用户名 备份数据库 :exp c ...

  9. MySQL数据库的数据备份和恢复(导入和导出)命令操作语法【转】

    不管是Oracle数据库还是SQL Server数据库,每个数据库都有自己的一套数据备份和恢复的方法,MySQL数据库也不例外.MySQL数据库备份和恢复用到了两个命令,分别是“mysqldump”和 ...

随机推荐

  1. java 线程方法join的简单总结

    虽然关于讨论线程join方法的博客已经很多了,不过个人感觉挺多都讨论得不够全面,所以我觉得有必要对其进行一个全面的总结. 一.作用 Thread类中的join方法的主要作用就是同步,它可以使得线程之间 ...

  2. Unity应用架构设计(10)————绕不开的协程和多线程(Part 1)

    在进入本章主题之前,我们必须要了解客户端应用程序都是单线程模型,即只有一个主线程(Main Thread),或者叫做UI线程,即所有的UI控件的创建和操作都是在主线程上完成的.而服务器端应用程序,也就 ...

  3. pycharm5工具免费分享及安装教程

    好东西,就要分享,最近在捣鼓Python,所以就找个pycharm5工具,感觉挺好用的. 废话不多说了,所见即所得: 百度云盘分享:http://pan.baidu.com/s/1sk9k4Nj 密码 ...

  4. vue-动手做个选择城市

    查看完整的代码请到   我的github地址  https://github.com/qianyinghuanmie/vue2.0-demos 一.结果展示 二.前期准备: 1.引入汉字转拼音的插件, ...

  5. 深度解析PHP数组函数array_slice

    看到array_slice()这个函数让我想起了VFP中的range这个范围取值的子句 这个函数一共有四个参数: 被取值的数组(必需) 取值的起始位置(必需) 取值的终止位置,如果不填写默认到数组最后 ...

  6. 从零自学Hadoop(23):Impala介绍及安装

    阅读目录 序 介绍 安装 系列索引 本文版权归mephisto和博客园共有,欢迎转载,但须保留此段声明,并给出原文链接,谢谢合作. 文章是哥(mephisto)写的,SourceLink 序 上一篇, ...

  7. [翻译] 编写高性能 .NET 代码--第五章 通用编码与对象设计 -- 类 vs 结构体

    本章介绍了本书其它部分未涉及到的一些编码和设计原则.包含了一些.NET的应用场景,有些不会造成太大危害,有些则会造成明显的问题.剩下的则根据你的使用方法会产生不同的效果.如果要对本章节出现的原则做一个 ...

  8. SQL Server 中函数的理解总结

    T-SQL语言为我们提供了更加灵活的方式操作数据,那就是函数,函数总的分为三大类:标量函数:(传入一个参数,再传出一个参数)聚合函数(传入多个参数,传出一个参数),表值函数(传入一个结果集对象,让我们 ...

  9. 纯css实现select下拉框并排显示

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. Sublime常用插件

    注:此插件为我自己在用的,仅代表个人,如果发现好用的插件,会不断更新此博文. 1,package control 我们用sublime几乎都会首先安装这个插件,这个插件是管理插件的功能,先安装它,再安 ...