2016-10-05 154 views
1

我必须使用PHP脚本将MySql数据库表中的CSV文件导入。 CSV文件如下:将CSV导入到Mysql过程中的NULL字段

"giorno","lmedollton","changedolleuro","euroton","lmesterton","delnotiz","girm","sgm" 
"2016-09-02", "100.01", "4005.09", "5000", "1.09", "120.09", "100.5", "200.77" 
"2016-09-03", "150.01", "4205.09", "5600", "1.10", "150.09", "300.5", "300.77" 

表结构如下:

# Campo Tipo Collation Attributi Null  
    1 id int(20)   No Nessuno AUTO_INCREMENT 
    2 giorno date   Sì NULL  
    3 lmedollton float   Sì NULL   
    4 changedolleuro float   Sì NULL   
    5 euroton float   Sì NULL   
    6 lmesterton float   Sì NULL   
    7 delnotiz float   Sì NULL   
    8 girm float   Sì NULL   
    9 sgm float   Sì NULL    

有两种诸多问题:

1)使用这个PHP代码:

$csvFile = "../scripts/tabella.csv"; 

     $db = @mysql_connect('***', '***', '***'); 
     @mysql_select_db('***'); 

     $query = 'LOAD DATA LOCAL INFILE \' '. $csvFile .' \' INTO TABLE rame FIELDS TERMINATED BY \',\' ENCLOSED BY \'"\' LINES TERMINATED BY \'\n\' 
(giorno,lmedollton,changedolleuro,euroton,lmesterton,delnotiz,girm,sgm)'; 

     if(!mysql_query($query)){ 
      die(mysql_error()); 
     } 
     //@mysql_query($query); 

     mysql_close($db); 

mysql_error返回'找不到文件';我也尝试使用realpath函数,但错误是一样的。 CSV文件位于www.valuebiz.it/valuebiz/scripts/tabella.csv中的站点服务器上,其权限为777.使用此URL作为URL可正确下载tabella.csv。 哪一条是我要使用的正确路径?

2)我试图在我的本地主机上工作查询,它​​运行但添加记录的每个字段都是NULL。该表有9个字段,包括ID字段(自动递增):第一个是DATE类型,其他是FLOAT类型。 为什么插入值为NULL?

你能帮助我吗? 谢谢!

+0

在这个位置没有csv文件:www.valuebiz.it/valuebiz/scripts/tabella。 csv尝试用此路径手动打开文件。 – Dave

+0

您需要在_filesystem_中给出路径,而不是URL。将该文件保存在某个位置的服务器上,然后进行。 –

+0

@Dave,我尝试一下,路径是正确的,文件被下载。 – Federica

回答

0

我发现导入尝试有三个主要问题。首先,如果文件路径错误,则无法移动。其次,您应该在命令末尾使用IGNORE 1 LINES来告诉MySQL您的CSV文件在开头处有一行标题。第三,我认为您应该使用LOAD DATA INFILE而不是LOAD DATA LOCAL INFILE,因为您正在从服务器执行此代码,而不是客户端。试试沿着这些线路:

的Windows:

LOAD DATA INFILE 'C:/path/to/data.csv' INTO TABLE rame 
FIELDS TERMINATED BY ',' ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n' 
IGNORE 1 LINES 
(giorno, lmedollton, changedolleuro, euroton, lmesterton, delnotiz, girm, sgm); 

Unix的:

LOAD DATA INFILE '\path\to\data.csv' INTO TABLE rame 
FIELDS TERMINATED BY ',' ENCLOSED BY '"' 
LINES TERMINATED BY '\n' 
IGNORE 1 LINES 
(giorno, lmedollton, changedolleuro, euroton, lmesterton, delnotiz, girm, sgm); 
+0

谢谢,路径是错误的,但我不知道为什么。在Fileziila文件夹结构中,它位于www.site.it/site/scripts/tabella.csv中。为什么没有找到?我在我的本地主机(Windows机器)试过这个查询,结果总是为每个字段的NULL值 – Federica

+0

你使用的是Linux还是Windows?用'rame'表的表定义更新你的问题。 –

+0

你真的尝试过我的答案吗? –