Мой файл tex / csv имеет 3 столбца first_name , last_name и address но в моей таблице базы данных есть два столбца first_name и last_name . Я хочу иметь функцию, что даже в столбцах csv есть много столбцов, которые не существуют в таблице, они все равно могут выбрать правильный столбец и вставить в таблицу. Кто-то советует мне использовать php mysql_fetch_field . Я пытаюсь mysql_fetch_field и я могу собрать имя столбца таблицы базы данных, но я не могу вставить данные в соответствии с заголовком таблицы.
set_time_limit(0); include "connection.php"; //Connect to Database if (isset($_POST['submit'])) { // Gel table current column name $query = "select * from month"; $result=mysql_query($query) or die (mysql_error()); $i = 0; while ($i < mysql_num_fields($result)) { $meta = mysql_fetch_field($result, $i); $a=$meta->name; $i++; } //Upload File if (is_uploaded_file($_FILES['filename']['tmp_name'])) { echo "<h1>" . "File ". $_FILES['filename']['name'] ." uploaded successfully." . "</h1>"; echo "<h2>Displaying contents:</h2>"; readfile($_FILES['filename']['tmp_name']); } //Import uploaded file to Database $handle = fopen($_FILES['filename']['tmp_name'], "r"); $header = fgetcsv($handle); while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) { $import="INSERT into month($header[0],$header[1]) values('$data[0]','$data[1]')"; mysql_query($import) or die(mysql_error()); } fclose($handle); echo "Import done"; }
Я не уверен, что получаю то, что вам нужно, но я думаю, вы должны использовать MySQL Load Data Infile для загрузки этого CSV следующим образом:
LOAD DATA LOCAL INFILE 'your_file.csv' INTO TABLE your_table FIELDS TERMINATED BY ';' LINES TERMINATED BY '\r\n' (field1, field2, field3)
Вот как я работаю с CSV и это хорошо работает.
Проверьте эту ссылку .
Вы можете использовать команду LOAD DATA INFILE MySQL. Как указано в руководстве:
Вы также можете отбросить входное значение, присвоив его переменной пользователя и не присваивая переменную столбцу таблицы:
LOAD DATA INFILE 'file.txt' INTO TABLE t1 (column1, @dummy, column2, @dummy, column3);
Поэтому в вашем случае:
LOAD DATA INFILE '/path/to/file' INTO TABLE month FIELDS TERMINATED BY ',' ENCLOSED BY '"' IGNORE 1 LINES (first_name, last_name, @dummy);