【问题标题】:import txt/csv data into database according to database table header根据数据库表头将txt/csv数据导入数据库
【发布时间】:2012-09-04 11:17:39
【问题描述】:

我的 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_*,因为它将被弃用,切换到PDOmysqli_*。还有here'sLOAD LOCAL INFILE 使用 PDO 的示例,可能有用

标签: php mysql csv import header


【解决方案1】:

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

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

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

检查这个link

【讨论】:

    【解决方案2】:

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

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

    加载数据输入文件'file.txt'
      进入表 t1
      (column1, @dummy, column2, @dummy, column3);

    因此,在你的情况下:

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

    【讨论】:

      猜你喜欢
      • 2011-12-17
      • 1970-01-01
      • 1970-01-01
      • 2017-11-26
      • 2011-08-09
      • 1970-01-01
      • 2016-12-30
      • 2013-05-02
      • 1970-01-01
      相关资源
      最近更新 更多