我有一个包含用户信息的CSV文件,比如说
first_name;last_name;user_id;full_name
列分隔符为;
,行终止符为\n
。
我需要做的是插入或更新到users
表。唯一键是user_id
:如果已存在此user_id
的记录,我需要更新,如果它不是我需要插入的。
但是,有些问题阻止我使用管理工作室数据导入或bulk insert
。
首先,users
表(不仅仅是4)中有更多字段,csv
文件中的列顺序与表中列的顺序不对应。所以我需要能够指定文件中的哪一列到表中的哪一列。
其次,需要填写一些额外的字段。例如,users.email = users.user_id
。这是另一个障碍 - 尽管对于新插入的行users.email = users.user_id
,users.email
将来可能会发生变化,因此我不能只插入user_id
然后运行update [users] set [email] = [user_id]
。
答案 0 :(得分:0)
使用fgetcsv
两个上校的例子:
<?php
$row = 0;
$update = "";
//separator of column
$separator = ";";
//creates two variables containing the index columns to read / modify
$idx_nom = 0;
$idx_rubrique = 1;
//Open file writing
if (($handle = fopen("test.csv", "r")) !== FALSE)
{
//we travel the file line by line, storing the data in a table
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE)
{
//can not control that the second line if the first contains the column headers
if ($row != 0)
{
//conditions of one column
if (stristr($data[$idx_nom], 'chemise'))
{
$data[$idx_rubrique] = 1;
}
else if (stristr($data[$idx_nom], 'costume'))
{
$data[$idx_rubrique] = 2;
}
else if (stristr($data[$idx_nom], 'cravate'))
{
$data[$idx_rubrique] = 3;
}
}
$update .= implode($separator,$data)."\r\n";
$row++;
}
fclose($handle);
}
//update from csv
$ouvre=fopen("test.csv","w+");
fwrite($ouvre,$update);
fclose($ouvre);
?>