【问题标题】:File Upload for csv file into Mysql/PHP将 csv 文件的文件上传到 Mysql/PHP
【发布时间】:2014-08-11 18:11:46
【问题描述】:
//connect to Database

mysql_select_db($database_csv, $csv);

if (isset($_POST['submit'])) {

if (is_uploaded_file($_FILES['filename']['tmp_name'])) {

echo "<br><center><p>" . " ". $_FILES['filename']['name'] ." " . "</p></center>";
                                                        }

//Import uploaded file to Database
$handle = fopen($_FILES['filename']['tmp_name'], "r");
$firstRow = true;
$count = 0; //skip first line of the CSV file 
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {

if($count) //skip first line of the CSV file 
{

$name=$data[0];

$description=$data[1];

$price=$data[2];

$shipping=$data[3];

$quantity=$data[4];

$import="INSERT into results (name,description,price,shipping,quantity) VALUES('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]')";

mysql_query($import) or die(mysql_error());
}
$count++;
}

fclose($handle);

?>

在 PHP/Mysql 中使用 FileUpload 上传 .CSV 文件,但 csv 中的数据全部插入五列中的一列,请阅读我的代码和帮助。 在此先感谢..

【问题讨论】:

    标签: php mysql file csv upload


    【解决方案1】:

    试试这个:

    if($count) //skip first line of the CSV file 
    {
    
    $data[0]=$data[0];
    
    $data[1]=$data[1];
    
    $data[2]=$data[2];
    
    $data[3]=$data[3];
    
    $data[4]=$data[4];
    
    $import="INSERT into results (name,description,price,shipping,quantity) VALUES('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]')";
    
    mysql_query($import) or die(mysql_error());
    }
    $count++;
    }
    

    【讨论】:

      【解决方案2】:

      一个简单的 LOAD DATA INFILE 就可以正常工作。它也会快很多。

      代码:

      <?php
      //connect to Database
      mysql_select_db($database_csv, $csv);
      
      if (isset($_POST['submit'])) {
      
          $tmp = $_FILES['filename']['tmp_name'];
          $name = $_FILES['filename']['name'];
      
          //Can be any full path, just don't end with a /. That will be added in in the path variable
          $uploads_dir = 'C:/Users/Ernest/Desktop';
      
          $path = $uploads_dir.'/'.$name;
      
          if(move_uploaded_file($tmp, $path)){
              echo "<br><center><p>". $name ."</p></center>";
      
              //Import uploaded file to Database
              //If the query fails, try LOAD DATA LOCAL INFILE
              $import = "
              LOAD DATA INFILE '".$path."'
                     INTO TABLE results  CHARACTER SET utf8 FIELDS TERMINATED BY ','
                     OPTIONALLY ENCLOSED BY '\"' IGNORE 1 LINES (name, description, price, shipping, quantity);
              ";
      
              mysql_query($import) or die(mysql_error());
              //If you do not want to keep the csv, you can delete it after this point.
              //unlink($path);
      
          }else{
              echo 'Failed to move uploaded files';
          }
      
      }
      ?>
      

      【讨论】:

      • 我试过了,但仍然出现以下错误:File 'C:xampp mpphp6A79.tmp' not found (Errcode: 22)
      • 尝试加载数据本地文件
      • 似乎是同样的错误:找不到文件'C:xampp mpphpE5D0.tmp' (Errcode: 22)。但是当我知道我的文件位置时,它就像 LOAD DATA INFILE 中的 C:/Users/Ernest/Desktop/Book1.csv 一样工作。谢谢请帮忙。
      • tmp_name 现在是问题... 'C:xampp mpphpE5D0.tmp' not found
      • 我更新了我的答案,将上传的文件移动到您的桌面,然后使用该路径加载数据文件。您可以将该路径更改为您想要的任何路径。此外,请确保将文件移动到与源文件夹不同的文件夹。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-27
      • 1970-01-01
      • 1970-01-01
      • 2015-03-24
      相关资源
      最近更新 更多