【问题标题】:insert data from csv file to mysql with php使用php将数据从csv文件插入mysql
【发布时间】:2013-12-27 21:49:12
【问题描述】:

我想用 php 将 csv 文件中的数据插入到我的 mysql 数据库中。但我不知道我做错了什么。

这是我的 php 代码

if ($_FILES[csv][size] > 0){
$csv_file = $_FILES[csv][tmp_name]; // Name of your CSV file
$csvfile = fopen($csv_file, 'r');
$theData = fgets($csvfile);


$i = 0;
while (!feof($csvfile)) {
$csv_data[] = fgets($csvfile, 1024);
$csv_array = explode(",", $csv_data[$i]);

$insert_csv = array();
$insert_csv['id'] = $csv_array[0];
$insert_csv['name'] = $csv_array[1];
$insert_csv['email'] = $csv_array[2];

if(!empty($insert_csv['email'])){
$query = "INSERT INTO contacts(id,name,email)
VALUES('','".$insert_csv['name']."','".$insert_csv['email']."')";
$n=mysqli_query($database->connection,$query);
}

$i++; 
}

fclose($csvfile);

}

这是我的 csv 的样子。

id---- name ------- email

1 ---- user1--------bla@hotmail.com

2 ---- user2 --------blah

3------ user 3 ------ blah

当我运行这段代码时,我的 mysql 结果是

在电子邮件表中 = ##0.00 "TL")$# en 在我的名字表中 = 也 ##0.00 "TL")$#;

我做错了什么?

【问题讨论】:

  • 不确定是否需要在 php 中进行所有循环和操作 - 为什么不使用 LOAD DATA INFILE 的本机功能? dev.mysql.com/doc/refman/5.1/en/load-data.html 然后您可以先在您的数据库上测试该语句以确保它有效
  • @hans:这是你的csv文件格式吗?
  • 不是真的我有一个 excel 文件。

标签: php mysql csv


【解决方案1】:

您可能希望使用 MySQL 通过 LOAD DATA INFILE 语句完成整个加载过程。

if($_FILES['csv']['error'] === UPLOAD_ERR_OK && $_FILES['csv']['size'] > 0) {
    $query = "LOAD DATA INFILE '" . $_FILES['csv']['tmp_name'] 
    . "' INTO TABLE contacts FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\n' (id, name, email);";

    if(!mysqli_query($query)){
        die('Oops! Something went wrong!');
    }
}

如果需要,您可以调整加载参数(FIELDS TERMINATED BYENCLOSED BYLINES TERMINATED BY)。

请注意,如果您使用这种方法,您的临时文件需要存储在 MySQL 服务器可以访问的位置(例如 /tmp)。

【讨论】:

    【解决方案2】:

    首先,我认为你应该删除第一个

    $data = fgetcsv($getfile, 1000, ",");
    

    行,在while循环之外...

    【讨论】:

      【解决方案3】:

      请以这个为例,它应该适合你

      我认为你错过了 "

      $query = "INSERT INTO contacts(id,name,email)
      VALUES('".$col1."','".$col2."','".$col3."')";
      

      "

      <?php
      
          $csv_file = 'C:\wamp\www\stockmarket\test.csv'; // Name of your CSV file with path
          if (($getfile = fopen($csv_file, "r")) !== FALSE) { 
                  $data = fgetcsv($getfile, 1000, ",");
                  while (($data = fgetcsv($getfile, 1000, ",")) !== FALSE) {
                   $num = count($data); 
                   for ($c=0; $c < $num; $c++) {
                       $result = $data; 
                       $str = implode(",", $result); 
                       $slice = explode(",", $str);
                       $col1 = $slice[0]; 
                       $col2 = $slice[1];
                       $col3 = $slice[2]; 
      
          // SQL Query to insert data into DataBase
      
          $query = "INSERT INTO contacts(id,name,email)
          VALUES('".$col1."','".$col2."','".$col3."')";
      
          $s=mysql_query($query, $connect ); 
               }
             } 
            }
          ?>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-04-21
        • 1970-01-01
        • 2022-11-11
        • 2015-01-19
        • 2021-03-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多