简体   繁体   English

加载数据文件不起作用

[英]load data infile is not working

I am trying to batch upload by csv file. 我正在尝试通过csv文件批量上传。 my csv file located in webroot/CSV/data.csv. 我的csv文件位于webroot / CSV / data.csv中。 Data are as follows: 数据如下:

name,email
santo, abc@gmail.com

my code: 我的代码:

$sql = "LOAD DATA INFILE '$filepath'
    INTO TABLE customers
    FIELDS TERMINATED BY ','
    OPTIONALLY ENCLOSED BY '\"' 
    LINES TERMINATED BY ',,,\\r\\n'
    IGNORE 1 LINES 
    (name, email)";
    $this->Customer->query($sql);

here 这里

$filepath = WWW_ROOT . 'CSV' . DS.'data.csv';

Getting error: 出现错误:

C:\server\mysql\data\serverhtdocsdemo-home25appwebrootCSVdata.csv' not found (Errcode: 2 "No such file or directory")

I check the file it exists and file location in sql seems to okay: 我检查文件是否存在,并且在sql中的文件位置似乎还可以:

SQL Query: LOAD DATA INFILE 'C:\server\htdocs\demo-home25\app\webroot\CSV\data.csv' INTO TABLE customers FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY ',,,\r\n' IGNORE 1 LINES (name, email)

What is the wrong in my code? 我的代码有什么问题?

You tried to use "LOAD DATA LOCAL INFILE"? 您试图使用“ LOAD DATA LOCAL INFILE”?

LOAD DATA LOCAL INFILE 'abc.csv' INTO TABLE abc
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(col1, col2, col3, col4, col5...);

In your case: 在您的情况下:

$sql = "LOAD DATA LOCAL INFILE '$filepath'
    INTO TABLE customers
    FIELDS TERMINATED BY ','
    OPTIONALLY ENCLOSED BY '\"' 
    LINES TERMINATED BY ',,,\\r\\n'
    IGNORE 1 LINES 
    (name, email)";
    $this->Customer->query($sql);

"If LOCAL is specified, the file is read by the client program on the client host and sent to the server." “如果指定了LOCAL,则文件将由客户端主机上的客户端程序读取并发送到服务器。” from Documentation 文档

Answered in https://stackoverflow.com/a/14133740/2925795 https://stackoverflow.com/a/14133740/2925795中回答

I had the same issue. 我遇到过同样的问题。 Sometimes it happens that your mysql server and client understand file locations differently. 有时,您的mysql服务器和客户端对文件位置的理解不同。

Add LOCAL modifier (as LOAD DATA LOCAL INFILE ) to your query LOCAL修饰符(作为LOAD DATA LOCAL INFILE )添加到您的查询中

$sql = "LOAD DATA LOCAL INFILE '$filepath'
INTO TABLE customers
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\"' 
LINES TERMINATED BY ',,,\\r\\n'
IGNORE 1 LINES 
(name, email)";
$this->Customer->query($sql);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM