【发布时间】:2017-07-15 19:04:55
【问题描述】:
我正在尝试为几个进程连接点。我有一个项目需要每天通过网页上的表单上传 CSV,该表单已经存在。每次加载 CSV 时,需要将 110 列拆分为大约 5 个不同的 MySQL 表。 CSV 将始终保持相同的顺序,但我需要确切知道 CSV 中的哪些变量/列要放入特定的表和字段中。完成此操作后,我将需要仅通过查询在其他页面上显示数据(根据页面仅显示某些内容)。我有以下代码来测试将 CSV 放入数组中:
if(isset($_POST['submit']))
{
$array = $fields = array(); $i=0;
$file = $_FILES['file']['tmp_name'];
$handle = fopen($file, "r");
if($handle){
while (($row = fgetcsv($handle, 4096)) !== false) {
if (empty($fields)) {
$fields = $row;
continue;
}
foreach ($row as $k=>$value) {
$array[$i][$fields[$k]] = $value;
}
$i++;
}
echo "Success!";
var_dump($array);
if (!feof($handle)) {
echo "Error: unexpected fgets() fail\n";
}
fclose($handle);
}}?>
这似乎适用于 Var_dump。然后,我分别在一个只有十个字段的小型 CSV 上使用了以下代码:
while(($filesop = fgetcsv($handle, 4096, ",")) !== false)
{
$one = $filesop[0];
$two = $filesop[1];
$three = $filesop[2];
$four = $filesop[3];
$five = $filesop[4];
$six = $filesop[5];
$seven = $filesop[6];
$eight = $filesop[7];
$nine = $filesop[8];
$ten = $filesop[9];
$sql = "INSERT INTO staging (One, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten) VALUES ('$one','$two', '$three','$four','$five','$six','$seven','$eight','$nine','$ten')";
}
if ($connect->query($sql) === TRUE) {
echo "You database has imported successfully";
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
我仍然对如何将这些每日上传的 CSV 的 110 个字段映射到正确的表(10 个字段到一个表,25 个到另一个,30 个到另一个等)感到困惑,以便我可以使用变量在其他页面上显示某些字段。
更新:
数组的新代码:
$table_cols[5] ="workOrderNum,lowSideMIUNum,highSideMIUNum,accountNum,custName,address,locID,utility,serialNumber,serviceName";
$tablenames = array("staging","clients","meters","tests","costs","workorders");
for($tableno = 0;$tableno < sizeof($tablenames);$tableno++){
$q = "";
$q .= "INSERT INTO ".$tablenames[$tableno]." (".$table_cols[$tableno].") VALUES (";
$cols = explode("," ,$table_cols);
$data = array();
foreach($col as $key => $fldname) {
$data[] = "'".$coldata[$fldname]."'";
}
$q .= implode(",",$data).");";
}
echo'File submitted';
【问题讨论】: