2017-07-31 45 views
0

我在PHP/MySQL的项目时,它必须验证以下任务:自动生成MySQL表后的CSV文件上传

- >用户上传多个大的CSV文件,在使用相同的列名的时间(X,Y,Z)在MySQL表

- >的Web应用程序必须将每个CSV文件的列之间执行算术运算

- >用户可以在操作后下载CSV文件Excel文件

有关上载的一部分,我需要找到一个方法来自动生成数据库表中的每个csv文件上传在高级 - 创建它的-instead,因为用户应该能够上传多个文件,他要。

我试图设置一个while循环,其中包含一个创建表,循环从0到$ var这是用户希望上传的csv文件的数量,但它不添加任何表,这里是代码部分:

$con= getdb(); 

$var=$_GET["quantity"]; 

mysql_query("set $i=0; 
      while $i<`".$var."` do 
      create table `couche".$var."` (X float NOT NULL,Y float NOT NULL,Z float NOT NULL); 
      set $i= $i+1; 
      end while"); 
} 
+0

你需要在实际的数据库表这个数据?或者,您只是将这些表格用作处理CSV数据的工具,并且在用户下载了修改后的结果后,这些表格就不再需要了? – CBroe

+0

请阅读代码中的最佳数据库实践。你的代码示例具有所有被愚弄的功能。 http://www.phptherightway.com/#databases – Bart

+0

主要目标是对大型csv文件执行操作,因此数据库表将只是一个工具,是的。 –

回答

0

嗨,你可以用下面的方式来实现这一目标:

<?php 

//database connection details 
$link = mysqli_connect('localhost','root','password','db_name') or die('Could not connect to MySQL'); 

// path where your CSV file is located 
define('CSV_PATH','/var/www/html/skerp_scripts/'); 

// Name of your CSV file 
$csv_file = CSV_PATH . "importItems.csv"; 

if (($handle = fopen($csv_file, "r")) !== FALSE) {   
    $header = true; //If there is a header in first row then set it to true 
    while (($data = fgetcsv($handle, 100000, ",")) !== FALSE) { 
    if($header == true){ 
     /* Here you can perform checks whether all the column are as expected 
      for Eg: in CSV1 : id, firstname, lastname, age 
      in CSV2 : firstname, age ,id 

      Than you can tell the user that there is a misatch 
     */ 
     $header = false; 
     continue; 
    } 
    $column1 = $data[0]; 
    $column2 = $data[1]; 
    $column3 = $data[2]; 

    $calculation = $column1 * $column3; 
    $result = mysqli_query($link, "INSERT INTO table_name (column1, column2, column3)" VALUES($column1, $column2, $calculation)); 

    } 
} 
echo "File data successfully imported to database!!"; 
mysqli_close($connect);