上传并将csv文件导入mysql中的多个表

时间:2012-07-24 13:49:33

标签: php mysql csv import

我想在php中创建并上传页面,并将上传的csv文件数据导入多个表格。尝试在这里搜索,但看起来无法找到从csv导入到多个表的任何内容。非常感谢任何帮助。谢谢。

5 个答案:

答案 0 :(得分:1)

如果您有权访问PHPmyadmin,则可以将CSV上传到那里。然后复制到每个所需的表

答案 1 :(得分:1)

在回应您的评论时,某些数据将转到一个表而其他数据将转到另一个表,这是一个简单的示例。

表1有3个字段:姓名,年龄和性别。表2有2个领域:haircolour,shoesize。所以你的CSV可以像:

john smith,32,m,blonde,11
jane doe,29,f,red,4
anders anderson,56,m,grey,9

下一步,您将使用函数fgetcsv。这会将csv的每一行分解为一个数组,然后您可以使用它来构建SQL语句:

if (($handle = fopen($mycsvfile, "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        // this loops through each line of your csv, putting the values into array elements
        $sql1 = "INSERT INTO table1 (`name`, `age`, `sex`) values ('".$data[0]."', '".$data[1]."', '".$data[2]."')";
        $sql2 = "INSERT INTO table2 (`haircolour`, `shoesize`) values ('".$data[3]."', '".$data[4]."')";
    }
    fclose($handle);
}

请注意,这不会考虑任何SQL安全性,例如验证,但基本上它是如何工作的。

答案 2 :(得分:1)

作为上面提出的另一个变体,您可以逐行读取CSV并将每行分解为字段。每个字段将对应一个变量。

$handle = fopen("/my/file.csv", "r"); // opening CSV file for reading
if ($handle) { // if file successfully opened
    while (($CSVrecord = fgets($handle, 4096)) !== false) { // iterating through each line of our CSV

        list($field1, $field2, $field3, $field4) = explode(',', $CSVrecord); // exploding CSV record (line) to the variables (fields)

        // and here you can easily compose SQL queries and map you data to the tables you need using simple variables

    }
    fclose($handle); // closing file handler
}

答案 3 :(得分:0)

在我看来,问题是区分哪个表是哪个表。 当你发送像

这样的标题时
 table.field, table.field, table.field

然后拆分标题,你将获得所有表格和字段。

这可能是一种方法吗?

一切顺利

ps:因为你的评论...

csv文件中/可以有第一行,其中包含字段名。当需要将csv数据复制到多个表中时,您可以使用变通方法找出哪个表是哪个表。

 user.username, user.lastname, blog.comment, blog.title
 "sam"        , "Manson"     , "this is a comment", "and I am a title"

现在,在读取csv数据时,您可以在第一行上工作,在点处拆分标题以找出使用的表格以及字段。

使用此方法,您可以将csv数据复制到多个表。

但这意味着,你必须先编码:(

拆分字段名

// only the first line for the fieldnames
$topfields = preg_split('/,|;|\t/')
foreach( $topfields as $t => $f ) {
   // t = tablename, f = field
}

答案 4 :(得分:0)

if (($handle = fopen($mycsvfile, "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        // this loops through each line of your csv, putting the values into array elements
        $sql1 = "INSERT INTO table1 (`name`, `age`, `sex`) values ('".$data[0]."', '".$data[1]."', '".$data[2]."')";
        $sql2 = "INSERT INTO table2 (`haircolour`, `shoesize`) values ('".$data[3]."', '".$data[4]."')";
    }
    fclose($handle);
}

在上面的代码中,您使用两个插入查询来运行这些查询?