簡體   English   中英

CSV文件正在將其他行的最后一行中的空白行插入到mysql表中

[英]csv file is inserting a blank row in the last of other rows into mysql table

當我將記錄從csv文件插入mysql表時,它還會在其他記錄的最后一行插入空白行。

這是我的代碼:

<?php
     $connect = mysql_connect('localhost','root','root');
    if (!$connect) {
    die('Could not connect to MySQL: ' . mysql_error());
    }
   $cid =mysql_select_db('bizin490_devcredit',$connect);
      define('CSV_PATH', '/home/ubc/Documents/');
     $csv_file = CSV_PATH . "test.csv";
            $csvfile  = fopen($csv_file, 'r');
            $theData  = fgetcsv($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['email'] = $csv_array[1];
                $query = mysql_query("select name from test where name='" . $insert_csv['name'] . "'");
                $count = mysql_num_rows($query);
                if ($count == 0) {
                    $query = "INSERT INTO test(name,email)VALUES('" . $insert_csv['name'] . "','" . $insert_csv['email'] ."')";
                        $n = mysql_query($query, $connect);
                } else {
                    $sql = "update test set email='".$insert_csv['email']."'";
                            $qu  = mysql_query($sql);       
                }
     $i++;
                }

     fclose($csvfile);

            echo "File data successfully imported to database!!";
            mysql_close($connect);
            ?>

效率不高,但增加了條件

if ($insert_csv['name'] !== '' && $insert_csv['email']!=='') //since != '' will return true if you pass is numeric 0 and a few other cases, hence using !==
{
      $query = mysql_query("select name from test where name='" . $insert_csv['name'] . "'");
      $count = mysql_num_rows($query);
     if ($count == 0) {
                $query = "INSERT INTO test(name,email)VALUES('" . $insert_csv['name'] . "','" .  $insert_csv['email'] ."')";
                $n = mysql_query($query, $connect);
     } else {
                $sql = "update test set email='".$insert_csv['email']."'";
                $qu  = mysql_query($sql);       
     }

}

使用SplFileObject,您可以告訴它忽略空行,並自動將文件作為CSV文件處理

$file = new SplFileObject($csv_file);
$file->setFlags(SplFileObject::READ_CSV | SplFileObject::SKIP_EMPTY);
foreach ($file as $csv_array) {
    ...
}

此代碼中可能存在缺陷:

        $csvfile  = fopen($csv_file, 'r');           // opens the file
        $theData  = fgetcsv($csvfile);               // reads first line
        $i = 0;
        while (!feof($csvfile)) {                    // checks for eof
            $csv_data[] = fgets($csvfile, 1024);     // reads next line
  1. 沒有標題時,將跳過第一行。
  2. 讀完最后一行后, feoffalse fgets不檢查最后一個\\n后面是否有數據,因此feof為假。 然后fgets讀取“空”行,直到eof被錯誤地添加。

更改:

  // checks for eof and errors
  while ( ($csv_data[] = fgets($csvfile, 1024)) !== false) {  
       ...
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM