Вставьте данные CSV в MySQL в соответствии с заголовками - PullRequest
1 голос
/ 27 октября 2011

У меня есть простые сценарии для загрузки файла CSV, и это работает.Но как, если я хочу обрабатывать данные с указанными заголовками?Например, если в моей таблице 3 столбца: FirstName, LastName, Address, а теперь мой CSV-файл:

Address,FirstName,LastName
myadd,myfname,mylname

Как правильно вставить данные в mysql в соответствии с заголовками, даже если они не расположены так же, как столбец таблицыname?

Если я использую свои скрипты, он просто вставит myadd, myfname и mylname в FirstName, LastName и Address, даже заголовки также будут вставлены.

if (isset($_POST['upload'])) {

if (is_uploaded_file($_FILES['filename']['tmp_name'])) {
    echo "<h1>" . "File ". $_FILES['filename']['name'] ." uploaded successfully." . "</h1>";
    echo "<p>contents:</p>";
    readfile($_FILES['filename']['tmp_name']);
}


$handle = fopen($_FILES['filename']['tmp_name'], "r");

while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    $import="INSERT into CSVtest($column1,$column2,$column3,$column4,$column5) values('$data[0]','$data[1]','$data[2]','$data[3]','$data[4]')";

    mysql_query($import) or die(mysql_error());
}

fclose($handle);

Echo "Done";

}

1 Ответ

1 голос
/ 27 октября 2011

Вы говорите, что у вас есть сценарии: «Если я использую свои сценарии, он просто вставит myadd, myfname и mylname в FirstName, LastName и Address, даже заголовки будут вставлены».

Я предполагаю, что ваши сценарии генерируют SQL для этого, а именно, вы говорите INSERT INTO VALUES tablename (v1, v2, v3);

вместо того, чтобы делать это таким образом, делайте именованную вставку INSERT INTO user (f1, f2, f3) ЗНАЧЕНИЯ ('v1', 'v2', 'v3');

другими словами, укажите имена полей в скрипте, который генерирует sql.

...