Мой файл 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);