【问题标题】:Insert the record from csv file into database table will not fetch record from first column in a series将 csv 文件中的记录插入数据库表将不会从系列中的第一列获取记录
【发布时间】:2014-09-17 06:35:34
【问题描述】:

我将向您发送我用于将数据从 csv 文件插入数据库表的代码,但它不会从开头插入数据并连续到最后一条记录,而是随机获取记录请建议我更改当前代码这样它就会从开始连续获取记录,直到最后从 csv 文件中获取每条记录

 <?php
 $connect = mysql_connect("localhost","root","");
 set_time_limit(0);
 if (!$connect) 
 {
 die('Could not connect to MySQL: ' . mysql_error());
 }
 $cid=mysql_select_db("bond1",$connect);
 define("CSV_PATH","D:/wamp/www/csvfile/");                                                       

 $csv_file=CSV_PATH."file.csv";
 $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['name']=$csv_array[0];
 $insert_csv['address']='http://'.$csv_array[1];
 $insert_csv['duns_number']=$csv_array[2];
 $insert_csv['idnum']=$csv_array[3];

 $query="insert into  companyinfo(name,address,duns_number,id_number)values('".$insert_csv['name']."','".$insert_csv['address']."','".$insert_csv['duns_number']."','".$insert_csv['idnum']."')";
  $n=mysql_query($query,$connect);
  ++$i;
  }
  fclose($csvfile);
  echo "File data successfully imported to database!!";
  mysql_close($connect);
  ?>

【问题讨论】:

  • set_time_limit(0); $i=0; while(!feof($csvfile)) { $csv_data[] = fgets($csvfile,1024); $csv_array=explode(",", $csv_data[$i]); $insert_csv=数组(); $insert_csv['name']=$csv_array[0]; $insert_csv['address']='http://'.$csv_array[1]; $insert_csv['duns_number']=$csv_array[2]; $insert_csv['idnum']=$csv_array[3]; “插入公司信息(名称,地址,duns_number,id_number)值('”.$insert_csv['name']。“','”.$insert_csv['address']。“','”.$insert_csv[' duns_number']."','".$insert_csv['idnum']."')"; ++$i; } ?>
  • 请将此代码添加到您的帖子中,而不是在 cmets 中。可以听到阅读
  • 我已经把帖子里的代码发给你了,请看。

标签: php mysql csv


【解决方案1】:

http://php.net/manual/en/function.str-getcsv.php

使用该函数自动将 csv 解析为数组。

【讨论】:

  • 如果我想跳过已经在数据库中输入的需要在当前代码中进行更改的记录
【解决方案2】:

而不是检查文件指针的while循环feof

点赞while(!feof($csvfile))

fgets($csvfile,1024); 移到 while 循环中

 while (($csv_data = fgets($csvfile, 4096)) !== false) {

并在下面更改您的代码。希望它能解决您的问题。

【讨论】:

    【解决方案3】:

    这将进一步帮助您

    <?php
    
    set_time_limit(0);
    $i = 0;
    
    //create database connection
    $con=mysqli_connect("localhost","root","","my_db");
    
    // Check connection
    if (mysqli_connect_errno()) 
    {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
    }
    
    while (!feof($csvfile)) 
    {
        $csv_data = fgets($csvfile, 1024);
    
    //if it is first row skip here  || if any value is empty then skip the row
     if($i==0 || 
        (empty($csv_array[0]) || 
         empty($csv_array[1]) ||
         empty($csv_array[2]) ||
         empty($csv_array[3])))
        {
            ++$i;
    
            //continue the loop
            continue;
        }
    
        $csv_array = explode(",", $csv_data);
        $insert_csv = array();
        $insert_csv['name'] = $csv_array[0];
        $insert_csv['address'] = 'http://' . $csv_array[1];
        $insert_csv['duns_number'] = $csv_array[2];
        $insert_csv['idnum'] = $csv_array[3];
    
        $sql = "INSERT INTO companyinfo(name,address,duns_number,id_number)
                VALUES('" . $insert_csv['name'] . "',‌
                ​'" . $insert_csv['address'] . "',
                '" . $insert_csv['duns_number'] . "',
                '" . $insert_csv['idn‌​um'] . "')";
    
        //insert the query
        if (!mysqli_query($con,$sql)) 
        {
          die('Error: ' . mysqli_error($con));
        }
    }
    

    【讨论】:

    • 如何过滤 csv 文件中的数据,如果 csv 文件中的列为空,则该记录不会插入到数据库中
    • 检查更新后的答案,如果 csv 文件中的任何值为空,然后跳过该行
    猜你喜欢
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    • 2017-07-29
    • 1970-01-01
    • 2021-10-25
    相关资源
    最近更新 更多