磷酸盐
// $numberOption = the number of fields in TableA.
// $csvHeaders = a single dimention array with all the names of the fields in a CSV file.
// $tableHeaders = a single dimention array with all the names of the fields in TableA.
for ($a=0; $a < $numberOption; $a++) {
if ($a == 0) {
$toVars .= "@var$a";
$setCols .= $tableHeaders[$a] . " = @var" . $csvHeaders[$a];
} else {
$toVars .= ", @var$a";
$setCols .= ", " . $tableHeaders[$a] . " = @var" . $csvHeaders[$a];
}
}
$sql = "LOAD DATA LOCAL INFILE '".addslashes($current_file)."' REPLACE INTO TABLE $current_table FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '" . '"' . "' ESCAPED BY " . "'\\\\'" . " LINES TERMINATED BY '\n' IGNORE 1 LINES ($toVars) SET $setCols";
$sql 的返回值
"LOAD DATA LOCAL INFILE '\/var\/www\/html\/test_lms\/include\/files\/1349237011-2fb46cd0c360464ebf471755cc9580de-AUTO_INSURANCE.csv' REPLACE INTO TABLE auto FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' ESCAPED BY '\\\\' LINES TERMINATED BY '\n' IGNORE 1 LINES (@var0, @var1, @var2, @var3, @var4, @var5, @var6, @var7, @var8, @var9, @var10, @var11, @var12, @var13, @var14, @var15, @var16, @var17, @var18, @var19, @var20, @var21, @var22, @var23, @var24, @var25, @var26, @var27, @var28, @var29) SET callcenter = @var, agent = @varEMPTY, generation_date = @varEMPTY, first_name = @varEMPTY, last_name = @varEMPTY, email = @var3, phone = @var4, address = @var5, city = @var6, state = @var7, dob = @varEMPTY, gender = @varEMPTY, marital_status = @varEMPTY, rented = @varEMPTY, year = @varEMPTY, make = @varEMPTY, model = @varEMPTY, trim = @varEMPTY, vin = @varEMPTY, primary_use = @varEMPTY, miles_oneway = @varEMPTY, mileage = @varEMPTY, license_num = @varEMPTY, license_state = @varEMPTY, education = @varEMPTY, job_title = @varEMPTY, vendors = @var9, license_status = @varEMPTY, zip = @var8, dupe = @varEMPTY
好的,在 php 行中清楚地表明$setCols .= $tableHeaders[$a] . " = @var" . $csvHeaders[$a];
它正在$setCols
使用字段名称初始化tableA
,然后是等号,然后是这个东西@var
(我猜是 mysql 变量?),然后是 csv 字段名称。但结果显示@var
符号上附加了一个数字,而不是 csv 字段名称!有些@var
已EMPTY
附加到它们,这仅意味着$csvHeaders
数组中没有要使用的字段名称,因此EMPTY
返回了。
无论如何,它有效。实际上,我能够很好地完美地加载 csv 文件。但我不明白它是如何能够SET
与@var#
而不是@varCSVNAME
。另一个问题是为什么要使用@var
?不会IGNORE LINES 1 (table field names) SET (csv header names)
工作得很好吗?为什么是@var
的?