Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在mysql中上传并导入csv文件到多个表中_Php_Mysql_Csv_Import - Fatal编程技术网

Php 在mysql中上传并导入csv文件到多个表中

Php 在mysql中上传并导入csv文件到多个表中,php,mysql,csv,import,Php,Mysql,Csv,Import,我想在php中创建和上传页面,并将上传的csv文件数据导入到多个表中。尝试在此处搜索,但似乎找不到任何正在从csv导入到多个表的内容。非常感谢您的帮助。多谢各位 如果您有权访问PHPmyadmin,您可以将CSV上载到其中。然后将if复制到每个所需的表在我看来,问题似乎在于区分哪个表的字段。 当您发送标题时,如 table.field, table.field, table.field 然后拆分标题,将得到所有表和字段 这是一条路吗 祝你一切顺利 ps:因为你的评论 csv文件具有/可以具有

我想在php中创建和上传页面,并将上传的csv文件数据导入到多个表中。尝试在此处搜索,但似乎找不到任何正在从csv导入到多个表的内容。非常感谢您的帮助。多谢各位

如果您有权访问PHPmyadmin,您可以将CSV上载到其中。然后将if复制到每个所需的表

在我看来,问题似乎在于区分哪个表的字段。 当您发送标题时,如

 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
}

下面是一个简单的示例,以回应您关于某些数据将进入一个表而其他数据将进入另一个表的评论

表1有3个字段:姓名、年龄和性别。表2有2个字段:头发颜色、鞋样。因此您的CSV可以如下所示:

john smith,32,m,blonde,11
jane doe,29,f,red,4
anders anderson,56,m,grey,9
在下一步中,您将使用该函数。这将把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安全性(如验证),但基本上它是这样工作的。

作为上面提出的另一个变体,您可以逐行读取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
}
if(($handle=fopen($mycsvfile,“r”))!==FALSE){
while(($data=fgetcsv($handle,1000,“,”)!==FALSE){
//这将循环通过csv的每一行,将值放入数组元素中
$sql1=“在表1(`name`、`age`、`sex`)中插入值('''.$data[0].''.''.''.'.''.'.''.$data[1].''.'.'.''.'.'.''.$data[2].')”;
$sql2=“插入表2(`haircolour`、`shoesize`)值(“$data[3]”、“$data[4]”);
}
fclose($handle);
}

在上面的代码中,您使用了两个insert查询如何运行这些查询?

多个表是什么意思:是所有数据都进入多个表,还是一些数据进入一个表,其他数据进入另一个表?是的,我的意思是一些行的数据进入一个表,另一个进入另一个表。您得到了有效的解决方案吗?这是有帮助的,但看起来我不能在我的项目中使用它,因为csv应该给用户一个从数据库中选择的下拉列表。所以我必须使用另一种方法。我可以在phpmyadmin中导入,但这是一个gui,用户可以将数据导入数据库。我是php和mysql的初学者,所以不太确定如何进行。as与csv值一样长(用逗号分隔)与db_表中的字段完全匹配,然后它将直接导入。否则,数据将位于不正确的位置。请记住,如果列为空,则在csv文件中将其作为。是的,请理解,但是hw如果col1、col2、col3应导入到表1,col4、col5、col6应使用csv文件导入到表2中,则将需要拆分为不同的表。使用excel打开csv并拆分列up@mlishn:当然,编写这样的脚本任务的目的是为了避免在excel中跳过这些障碍(其他电子表格程序可用:-)?对不起,我是初学者,对您的评论没有任何线索。希望如此!你能和我分享一下如何编码吗。。是使用explode还是使用sql insert语句?我想做同样的事情,但有人能帮我在mysql_query中如何运行这两个查询吗?最好使用fgetcsv而不是fgets。在这种情况下,可以删除列表和分解。@BerndOtt,你说得对!:),但是,如果需要将数据映射到变量(bec),它将不会减少代码行。但如果仅仅使用数组就足够了,那么您的建议就更好了!我会说:这是关于读取csv文件。fgetcsv关心逃逸,可能还关心RFC4180。Explode函数不起作用。该数组很好,因为您可以将它直接用于某些db(例如sqlsvr)连接器,作为防止sql注入的参数。