使用PHP和MySQLi导入CSV替代方法

问题描述:

我正在使用下面的代码将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

您将不得不使用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