我有一个粗略而完整的工作CSV变换器。我当前系统的工作方式是将CSV文件导入带有静态列名的SQL数据库表,并仅导出特定(所需)列。这个系统运行良好,但仅适用于一种类型的CSV文件(因为列名是预先定义的。)我想知道如何使这种通用。而不是插入column1,column2,column3。我想插入Spreadsheet Column1,Spreadsheet Column2,Spreadsheet Column3等。我如何从CSV文件中提取列名,并在数据库中创建一个新表,其中列名是来自CSV第一行的列名文件。
现行制度:
理想的系统:
当前代码:
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只包含用于生成随机字符串/文件名的代码块。