2017-07-31 37 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);