我的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";
}
答案 0 :(得分:0)
您可以使用MySQL的LOAD DATA INFILE
命令。如手册中所述:
您还可以通过将输入值分配给用户变量而不将变量分配给表格列来丢弃输入值:
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);
答案 1 :(得分:0)
我不确定自己得到了什么,但我认为您应该使用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
合作的方式,而且它的工作做得很好。
选中link。