我正在创建一个将csv文件导入现有mySQL数据库的php脚本。
我通过检查数组中是否有标题并尝试使用列号在我的预准备语句中创建输入来选择匹配的列标题。
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
$numCols = count($data);
$row = array();
// process the first row to select columns for extraction
if($isFirstRow) {
$num = count($data);
for($col=0; $col<count($columns); $col++){
for($c=0; $c<$numCols; $c++)
if(!in_array($data[$c], $columns[$col])){
if($c == ($numCols-1))
{
$matchingCol[$col] = '""';
}
}
else{
$matchingCol[$col] = 'data['.$c.']';
apc_store("foo$c", $matchingCol[$col]);
}
}
$isFirstRow = false;
}
$data = array(
'contractorName' => (apc_fetch('foo1')) ,
'contractorType' => $matchingCol[3]);
$query = "INSERT INTO uploadSQL SET" . bindFields($data);
$result = $pdo->prepare($query);
$result->execute($data);
发布到数据库中的数据是'$data[3]'
,'$data[5]'
等。
如何让INSERT输入存储在$data[3]
而不是字符串'$data[3]'
的数据?
答案 0 :(得分:0)
Use $data[$c] instead of 'data['.$c.']'...!?
单引号字符串几乎完全“按原样”显示内容。变量和大多数转义序列都不会被解释。
答案 1 :(得分:0)
不是问题的确切解决方案,而是解决问题。我确信这是一种更有效的方法。
if($isFirstRow) {
$csvRow1 = $data;
}
$num = count($data);
for($col=0; $col<count($columns); $col++){
for($c=0; $c<$numCols; $c++){
if(!in_array($csvRow1[$c], $columns[$col])){
if($c == ($numCols-1))
{
$matchingCol[$col] = '""';
}
}
else{
$matchingCol[$col] = "$data[$c]";
$c = $numCols;
}
}
}