-1

所以我将一个 CSV 文件上传到我的 mysql 数据库,我希望它总是跳过第一行是第 0 行,它有列名

我使用的当前代码

    //connect to the database 
    $connect = mysql_connect("localhost","username","password"); 
    mysql_select_db("mydatabase",$connect); //select the table 
    // 

    if ($_FILES[csv][size] > 0) { 

        //get the csv file 
        $file = $_FILES[csv][tmp_name]; 
        $handle = fopen($file,"r"); 

        //loop through the csv file and insert into database 
        do { 
            if ($data[0]) { 
                mysql_query("INSERT INTO contacts (contact_first, contact_last, contact_email) VALUES 
                    ( 
                        '".addslashes($data[0])."', 
                        '".addslashes($data[1])."', 
                        '".addslashes($data[2])."' 
                    ) 
                "); 
            } 
        } while ($data = fgetcsv($handle,1000,",","'")); 
        // 

        //redirect 
        header('Location: import.php?success=1'); die; 

} 

我需要删除以下行 Source,First Name,Surname,Phone 1,Phone 2,Contact Email,Title,Ref Number,Date,Status

我本来打算做一个if($data[0]=="Source")但是问题是如果他们改变了 CSV 文件的布局或其他东西。

所以我的问题很简单,我们可以跳过第 0 行的第一行吗?

但是如果第 0 行的第一件事不是 Source,我可以收到警报,以便查看 CSV 文件吗?

4

3 回答 3

1

您可能有兴趣尝试使用LOAD DATA INFILE

LOAD DATA INFILE '/path/to/your/file.csv' 
INTO TABLE contacts 
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES;
于 2013-06-28T00:32:23.430 回答
0

读取文件的第一行,如果它是标题行,则将其丢弃:

    $file = $_FILES[csv][tmp_name]; 
    $handle = fopen($file,"r"); 

    // read the first line
    $data = fgetcsv($handle,1000,",","'")
    // if the first line is a header, discard it and read the next
    if ($data[0] == "Source:") {
       $data = fgetcsv($handle,1000,",","'")
    }

    //loop through the csv file and insert into database 
    do { 
        if ($data[0]) { 
            mysql_query("INSERT INTO contacts (contact_first, contact_last, contact_email) VALUES 
                ( 
                    '".addslashes($data[0])."', 
                    '".addslashes($data[1])."', 
                    '".addslashes($data[2])."' 
                ) 
            "); 
        } 
    } while ($data = fgetcsv($handle,1000,",","'")); 
    // 

顺便说一句,您的do...while循环与您最初的方式不同。在阅读数据之前,您正在查看数据。通过我添加的预读,它应该可以工作。

于 2013-06-28T00:31:00.090 回答
0

在 fopen 之后,我会调用fgets($handle);并忽略返回值,从而跳过第一行。

于 2013-06-28T00:35:09.237 回答