2017-02-25 21 views
0

我正在使用下面的代碼將CSV文本文件導入到我的表中,但是我的新主機不允許LOAD DATA命令並迫使我找到導入文件的其他方法。當然,它們在給我一個明確的答案時毫無用處。使用PHP和MySQLi導入CSV替代方法

除了LOAD DATA LOCALLOAD DATA之外,還有什麼其他方法需要通過PHP/MySQLi將CSV文件導入到我的MySQL表中嗎?

// Query - import CSV file into DB, ignore top 3 lines 
    $sql= "LOAD DATA LOCAL INFILE '".$import_file."' INTO TABLE `$dbtable` 
     FIELDS TERMINATED BY '".$fieldseparator."' 
     LINES TERMINATED BY '".$lineseparator."' 
     IGNORE 3 LINES 
     SET TIMESTAMP = '".$local_time."'"; 

感謝

編輯:

尋找到建議fgetcsv功能後,我想出了下面的代碼。理論上,它應該可以工作,但代碼似乎會加載直到最終超時而不顯示錯誤。數據庫僅填充單個行條目。

我在做什麼錯在這裏?

   if ($import_file) { 
        // set row counter to 0 
        $line = 0; 

        while (($row = fgetcsv($import_file)) !== false) { 

        // ignore the first 3 rows of the file based on iteration of the counter 
        if ($line <= 3) { 
         $line++; 
         continue; 
        } else { 

         // if row count is higher than 3, insert into database 
         $sql = "INSERT INTO `$dbtable` 
          (`OPERA_CONF`, `CRS`, `HOLIDEX`, `ARRIVAL`) 
          VALUES (
          '" . $row[0] . "', 
          '" . $row[1] . "', 
          '" . $row[2] . "', 
          '" . $row[3] . "' 
         )"; 

         // execute query 
         $mysqli->query($sql); 
         $line++; 

        } 

        } 

       } else { 
        echo "\n CSV file could not be found."; 
       } 
+0

你得的phpmyadmin進不去? – Ashish

+0

@Ashish我這樣做,但運行此查詢的腳本綁定到cronjob並應該每15分鐘運行一次。沒有'LOAD DATA'命令我什麼都不能做(或者至少我不知道如何) – Armitage2k

回答

1

您將不得不使用PHP逐行讀取CSV文件的內容並將它們插入表中。

看一看http://www.readmyviews.com/import-csv-data-mysql-using-php/

代碼粘貼在這裏的易用性:

$filepath = "C:\wamp\www\importdata\sample.csv"; 

if (($getdata = fopen($filepath, "r")) !== FALSE) { 
       fgetcsv($getdata); 
       while (($data = fgetcsv($getdata)) !== FALSE) { 
        $fieldCount = count($data); 
        for ($c=0; $c < $fieldCount; $c++) { 
         $columnData[$c] = $data[$c]; 
        } 
      $option_name = mysqli_real_escape_string($connect ,$columnData[0]); 
      $option_value = mysqli_real_escape_string($connect ,$columnData[1]); 
      $import_data[]="('".$option_name."','".$option_value."')"; 
      // SQL Query to insert data into DataBase 

      } 
      $import_data = implode(",", $import_data); 
      $query = "INSERT INTO option_data_master(option_name,option_value) VALUES $import_data ;"; 
      $result = mysqli_query($connect ,$query); 
+0

感謝那個Nick,只是不確定'option_data_master(option_name,option_value)'的用途是什麼?那些列名是?你可以看看我發佈的代碼嗎?謝謝 – Armitage2k

+0

沒問題:)你的代碼看起來不錯。您嘗試導入的CSV文件有多大? –

+0

小巧,最多500行,每行25列。整個事情只是加載,然後停止沒有任何錯誤消息。 – Armitage2k