使用php将csv上传到MySQL并进行更新

时间:2010-11-01 03:36:57

标签: php mysql csv import fastercsv

好的,我有一个名为具有此结构的请求的数据库表

mysql> desc requests;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| artist     | varchar(255) | YES  |     | NULL    |                |
| song       | varchar(255) | YES  |     | NULL    |                |
| showdate   | date         | YES  |     | NULL    |                |
| amount     | float        | YES  |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+

以下是一些示例数据

+----+-----------+-------------------------+------------+--------+
| id | artist    | song                    | showdate   | amount |
+----+-----------+-------------------------+------------+--------+
|  6 | Metallica | Hello Cruel World       | 2010-09-15 | 10.00  |
|  7 | someone   | Some some               | 2010-09-18 | 15.00  |
|  8 | another   | Some other song         | 2010-11-10 | 45.09  |
+----+-----------+-------------------------+------------+--------+

我需要一种方法来为用户提供一种上传具有相同结构的csv的方法,并根据csv中的内容更新或插入。我在网上发现了许多脚本,但大多数都有硬编码的csv,这不是我需要的。我需要用户能够上传csv ...用PHP来轻松....

以下是csv

的示例
id  artist          song           showdate    amount
11  NewBee          great stuff    2010-09-15  12.99
10  anotherNewbee   even better    2010-09-16  34.00
6    NewArtist       New song       2010-09-25  78.99

正如你所看到的,我已经在数据库中已经有了id 6,需要更新..其他两个将被插入

我不是要求有人写整个剧本,但是如果我可以在上传时获得一些指示,那么从哪里开始....谢谢

2 个答案:

答案 0 :(得分:2)

按如下所示创建商店程序并进行测试。这是作品

CREATE proc csv

(
@id int,
@artist varchar(50),
@songs varchar(100),
@showdate datetime,
@amount float
)
as
set nocount on

if exists (select id from dummy1 where id=@id) -- Note that dummy1 as my table.

begin
update dummy1 set artist= @artist where id=@id
update dummy1 set songs=@songs where id=@id
update dummy1 set showdate=@showdate where id=@id
update dummy1 set amount=@amount where id=@id
end
else
insert into dummy1  (artist,songs,showdate,amount)values(@artist,@songs,@showdate,@amount)
Go

答案 1 :(得分:1)

  1. 使用move_uploaded_file
  2. 将文件上传到目录
  3. 使用fgetcsv阅读上传的csv,并根据需要处理每一行。
  4. 删除csv文件