【问题标题】:NULL fields during import CSV to Mysql将 CSV 导入 Mysql 期间的 NULL 字段
【发布时间】:2017-02-13 16:58:51
【问题描述】:

我必须使用 PHP 脚本在 MySql db 表中导入 CSV 文件。 CSV 文件如下:

"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)我可以正确下载 tabella.csv。 我必须使用哪个正确路径?

2) 我尝试在我的本地主机中处理查询并且它运行但添加的记录的每个字段都是 NULL。该表有 9 个字段,包括 id 字段(自增):第一个是 DATE 类型,其他是 FLOAT 类型。 为什么插入的值是 NULL?

你能帮帮我吗? 谢谢!

【问题讨论】:

  • 此位置没有 csv 文件:www.valuebiz.it/valuebiz/scripts/tabella.csv 尝试使用此路径手动打开文件。
  • 您需要在 文件系统 中提供路径,而不是 URL。将该文件保存在服务器上的某个位置,然后继续。
  • @Dave,我试了一下,路径正确,文件下载完毕。

标签: php mysql sql csv import


【解决方案1】:

我发现您的导入尝试存在三个主要问题。首先,如果文件路径错误,则什么都不会移动。其次,您应该在命令末尾使用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);

【讨论】:

  • 谢谢,路径错误,但我不知道为什么。在 Fileziila 文件夹结构中,它位于 www.site.it/site/scripts/tabella.csv。为什么没找到?我在我的本地主机(Windows 机器)中尝试了这个查询,结果对于每个字段总是 NULL 值
  • 您使用的是 Linux 还是 Windows?使用 rame 表的表定义更新您的问题。
  • 你真的试过我的答案了吗?
  • 您能否将 CSV 文件从您的 PHP 脚本回显到控制台?这样,至少我们会知道您引用的文件在该路径存在/可访问。
  • 打印 $csvFile 内容(使用 file_get_contents 函数)我得到:string(188) ""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""""
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 2017-02-05
  • 1970-01-01
  • 1970-01-01
  • 2018-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多