我想在 php 中创建和上传页面,并将上传的 csv 文件数据导入到多个表中。尝试在这里搜索,但似乎找不到从 csv 导入到多个表的任何内容。非常感谢这里的任何帮助。谢谢你。
5 回答
如果您有权访问 PHPmyadmin,则可以将 CSV 上传到那里。然后将 if 复制到每个所需的表
为了回应您的评论,即某些数据将进入一个表,而其他数据将进入另一个表,这里是一个简单的示例。
Table1 有 3 个字段:姓名、年龄和性别。Table2 有 2 个字段:头发颜色、鞋码。因此,您的 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 安全性,例如验证,但这基本上是它的工作方式。
作为上面提出的另一个变体,您可以逐行读取 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
}
在我看来,这个问题似乎是区分哪个字段用于哪个表。当您发送标头时
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
}
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);
}
在上面的代码中,您使用了两个插入查询,您将如何运行这些查询?