我想在php中创建并上传页面,并将上传的csv文件数据导入多个表格。尝试在这里搜索,但看起来无法找到从csv导入到多个表的任何内容。非常感谢任何帮助。谢谢。
答案 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);
}
在上面的代码中,您使用两个插入查询来运行这些查询?