【问题标题】:how can i save the file after SELECT ... INTO OUTFILE 'result.csv'如何在 SELECT ... INTO OUTFILE 'result.csv' 后保存文件
【发布时间】:2010-11-29 14:46:01
【问题描述】:

我使用此查询将表转储到 csv 文件中:

$sql = "SELECT * 
        INTO OUTFILE 'result.csv'
        FIELDS TERMINATED BY ';'
        FROM tableName";

我在mysql的db文件夹中得到一个result.csv文件

我怎样才能把它保存在我网站的根目录下?

【问题讨论】:

    标签: php mysql sql into-outfile


    【解决方案1】:

    代替result.csv,提供您希望保存它的路径:

    $sql = "SELECT * 
            INTO OUTFILE '/path/to/your/site/result.csv'
            FIELDS TERMINATED BY ';'
            FROM tableName";
    

    【讨论】:

    • SELECT ... INTO OUTFILE 语句的主要目的是让您非常快速地将表转储到服务器计算机上的文本文件中。如果要在服务器主机以外的其他主机上创建结果文件,通常不能使用 SELECT ... INTO OUTFILE,因为无法写入相对于服务器主机文件系统的文件路径。但是,如果远程机器上安装了 MySQL 客户端软件,则可以改为使用 mysql -e "SELECT ..." > file_name 等客户端命令在客户端主机上生成文件。
    • MySQL 应该对您要保存此文件的路径具有写入权限。如果绝对必要,请在 my.cnf 中使用 user=root 行启动 mysql 并运行相同的命令。
    【解决方案2】:

    此代码可以将mysql表导出为csv文件,我已经用大表测试过

    <?php 
    // tested with success
    $db_name     = "db_name";
    $db_password = "pass";
    $db_link     = mysql_connect("localhost", "root", $db_password);
    mysql_select_db($db_name, $db_link);
    mysql_query("SET NAMES UTF8");
    
    $table = "table_name";
    
    function assoc_query_2D($sql, $id_name = false){
      $result = mysql_query($sql);
      $arr = array();
      $row = array();
      if($result){
        if($id_name == false){
          while($row = mysql_fetch_assoc($result))
            $arr[] = $row;
        }else{
          while($row = mysql_fetch_assoc($result)){
            $id = $row['id'];
            $arr[$id] = $row;
          }
        }
      }else
          return 0;
    
      return $arr;
    }
    
    function query_whole_table($table, $value = '*'){
        $sql = "SELECT $value FROM $table";
      return assoc_query_2D($sql);
    }
    
    $export_str = "";
    $result = query_whole_table($table);
    
    foreach($result as $record){
      $export_str .= implode(";",$record) . "\n";
    }
    // add time to fileName
    $date = time(); 
    // output the file 
    // we can set a header to send it directly to the browser
    file_put_contents($date.'_'.$table."_export.csv", $export_str);
    ?>
    

    【讨论】:

      猜你喜欢
      • 2011-08-10
      • 2011-05-14
      • 2011-02-21
      • 2013-03-24
      • 1970-01-01
      • 1970-01-01
      • 2014-10-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多