根据数据库表头将txt/csv数据导入数据库



我的tex/csv文件有3列first_namelast_nameaddress,但我的数据库表有两列first_namelast_name。我希望有一个函数,即使csv中有很多列不存在于表中,它仍然可以选择正确的列并插入到表中。有人建议我使用php mysql_fetch_field。我正在尝试mysql_fetch_field,我可以收集我的数据库表列名,但我不能根据表头插入数据。

     set_time_limit(0);
    include "connection.php"; //Connect to Database

    if (isset($_POST['submit'])) {
    // Gel table current column name
    $query = "select * from month";
    $result=mysql_query($query) or die (mysql_error());
    $i = 0;
    while ($i < mysql_num_fields($result)) {
        $meta = mysql_fetch_field($result, $i);
        $a=$meta->name;
        $i++;
    }
    //Upload File
    if (is_uploaded_file($_FILES['filename']['tmp_name'])) {
            echo "<h1>" . "File ". $_FILES['filename']['name'] ." uploaded successfully." . "</h1>";
            echo "<h2>Displaying contents:</h2>";
            readfile($_FILES['filename']['tmp_name']);
        }
        //Import uploaded file to Database
        $handle = fopen($_FILES['filename']['tmp_name'], "r");
            $header = fgetcsv($handle);

        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            $import="INSERT into month($header[0],$header[1]) values('$data[0]','$data[1]')";
            mysql_query($import) or die(mysql_error());
        }
        fclose($handle);
        echo "Import done";
    }

我不确定我能得到你需要的东西,但我认为你应该使用MySQL Load Data Infile来加载CSV,如下所示:

LOAD DATA LOCAL INFILE 'your_file.csv'
INTO TABLE your_table
FIELDS TERMINATED BY ';'
LINES TERMINATED BY 'rn'
(field1, field2, field3)

这就是我使用CSV的方式,它做得很好。

检查此链接。

您可以使用MySQL的LOAD DATA INFILE命令。如手册所示:

您也可以通过将输入值分配给用户变量而不将变量分配给表列来丢弃输入值:

LOAD DATA INFILE'file.txt'进入表t1(column1,@dummy,column2,@dumm,column3)

因此,在您的情况下:

LOAD DATA INFILE '/path/to/file' INTO TABLE month
  FIELDS TERMINATED BY ',' ENCLOSED BY '"'
  IGNORE 1 LINES
  (first_name, last_name, @dummy);

最新更新