构建转换CSV文件的应用程序

时间:2014-04-16 18:57:54

标签: php mysql sql excel csv

我有一个粗略而完整的工作CSV变换器。我当前系统的工作方式是将CSV文件导入带有静态列名的SQL数据库表,并仅导出特定(所需)列。这个系统运行良好,但仅适用于一种类型的CSV文件(因为列名是预先定义的。)我想知道如何使这种通用。而不是插入column1,column2,column3。我想插入Spreadsheet Column1,Spreadsheet Column2,Spreadsheet Column3等。我如何从CSV文件中提取列名,并在数据库中创建一个新表,其中列名是来自CSV第一行的列名文件。

现行制度:

  • 客户端上传CSV文件。
  • 使用预定义的列名称(第1列,第2列,第3列)
  • 创建表
  • 使用LOAD DATA INFILE - > PHP脚本会将CSV文件中的信息插入到最近创建的表中。
  • 下一个运行的查询只是从表中取出特定列并将其导出到最终的CSV文件。

理想的系统:

  • 客户端上传CSV文件。
  • PHP脚本读取CSV文件并仅获取第一行(列名称),在获取这些列名称后,它将根据列名称创建新表。
  • PHP脚本现在使用LOAD DATA INFILE。
  • 其余部分与现行制度相同。

当前代码:

import.php

include("/inc/database.php");
include("/inc/functions.php"); 
include("/inc/data.php"); 
if($_SERVER['REQUEST_METHOD'] == 'POST'){
$string = random_string(7);
$new_file_name = 'report_'. $string .'.csv';
$themove = move_uploaded_file($_FILES['csv']['tmp_name'], 'C:/xampp/htdocs/uploads/'.$new_file_name);
        mysql_query("CREATE TABLE report_". $string ."(". $colNames .")") or die(mysql_error());
    $sql = "LOAD DATA INFILE '/xampp/htdocs/uploads/report_". $string .".csv'
INTO TABLE report_". $string ."
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
(". $insertColNames .")";
    $query = mysql_query($sql) or die(mysql_error());
    header('Location: download.php?dlname='.$string.'');
}

data.php(缩短了大部分内容。实际上大约有200列,二十三列出来)

<?php
$colNames = "Web_Site_Member_ID text, 
Master_Member_ID text, 
API_GUID text, 
Constituent_ID text";
$insertColNames = "Web_Site_Member_ID,
Master_Member_ID,
API_GUID,
Constituent_ID";
$exportNames = "Web_Site_Member_ID, Date_Membership_Expires, Membership, Member_Type_Code";
?>

functions.php只包含用于生成随机字符串/文件名的代码块。

1 个答案:

答案 0 :(得分:0)

要查看CSV文件,请查看fgetcsv()功能。您应该能够轻松地提取一行数据并访问结果数组中的每个单独字段以用于列标题定义。