Hướng dẫn php import csv to mysql load data infile - php import csv vào mysql load data infile

Nếu bạn làm echo[$sql]; trước khi thực hiện nó, bạn sẽ thấy cú pháp của truy vấn của bạn không chính xác vì lý do sau:

  1. Tên tệp nên được đặt trong các trích dẫn thay vì backticks vì đó là một chuỗi theo nghĩa đen không phải là một định danh.

  2. Hoàn toàn không cần phải gọi mysql_escape_string[] để chỉ định một dấu phân cách trong các mệnh đề FIELDS TERMINATED BYENCLOSED BYESCAPED BY.

  3. Bạn lạm dụng các backticks. Trong thực tế trong trường hợp của bạn, vì không có từ dành riêng được sử dụng, bạn sẽ bỏ tất cả chúng. Họ chỉ thêm sự lộn xộn.

  4. Vào cuối dòng đầu tiên của tệp CSV của bạn, bạn phải có ,,, vì bạn sử dụng chúng như một phần của dấu phân cách dòng. Nếu bạn không làm điều đó, bạn sẽ bỏ qua không chỉ dòng đầu tiên mà còn là thứ hai có chứa dữ liệu.have to have ,,, because you use them as part of a line delimiter. If you won't do that you'll skip not only first line but also second one that contains data.

  5. Bạn không thể sử dụng mệnh đề ENCLOSED BY nhiều hơn một lần. Bạn phải đối phó với trường

    LOAD DATA INFILE 'detection.csv'
    INTO TABLE calldetections
    FIELDS TERMINATED BY ','
    OPTIONALLY ENCLOSED BY '"' 
    LINES TERMINATED BY ',,,\r\n'
    IGNORE 1 LINES 
    [@date, name, type, @number, @duration, @addr, @pin, @city, @state, @country, lat, log]
    SET date = STR_TO_DATE[@date, '%b-%d-%Y %h:%i:%s %p'],
        number = TRIM[BOTH '\'' FROM @number],
        duration = 1 * TRIM[TRAILING 'Secs' FROM @duration],
        addr = NULLIF[@addr, 'null'],
        pin  = NULLIF[@pin, 'null'],
        city = NULLIF[@city, 'null'],
        state = NULLIF[@state, 'null'],
        country = NULLIF[@country, 'null'] 
    
    1 theo một cách khác.

  6. Nhìn vào các hàng mẫu của bạn IMHO bạn không cần ESCAPED BY. Nhưng nếu bạn cảm thấy như bạn cần nó sử dụng nó như thế này

    LOAD DATA INFILE 'detection.csv'
    INTO TABLE calldetections
    FIELDS TERMINATED BY ','
    OPTIONALLY ENCLOSED BY '"' 
    LINES TERMINATED BY ',,,\r\n'
    IGNORE 1 LINES 
    [@date, name, type, @number, @duration, @addr, @pin, @city, @state, @country, lat, log]
    SET date = STR_TO_DATE[@date, '%b-%d-%Y %h:%i:%s %p'],
        number = TRIM[BOTH '\'' FROM @number],
        duration = 1 * TRIM[TRAILING 'Secs' FROM @duration],
        addr = NULLIF[@addr, 'null'],
        pin  = NULLIF[@pin, 'null'],
        city = NULLIF[@city, 'null'],
        state = NULLIF[@state, 'null'],
        country = NULLIF[@country, 'null'] 
    
    3.

Điều đó được nói là một tuyên bố chính xác cú pháp có thể trông như thế này

LOAD DATA INFILE 'detection.csv'
INTO TABLE calldetections
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY ',,,\r\n'
IGNORE 1 LINES 
[date, name, type, number, duration, addr, pin, city, state, country, lat, log]

Bây giờ IMHO bạn cần chuyển đổi khá nhiều trường trong khi bạn tải chúng:

  1. Nếu

    LOAD DATA INFILE 'detection.csv'
    INTO TABLE calldetections
    FIELDS TERMINATED BY ','
    OPTIONALLY ENCLOSED BY '"' 
    LINES TERMINATED BY ',,,\r\n'
    IGNORE 1 LINES 
    [@date, name, type, @number, @duration, @addr, @pin, @city, @state, @country, lat, log]
    SET date = STR_TO_DATE[@date, '%b-%d-%Y %h:%i:%s %p'],
        number = TRIM[BOTH '\'' FROM @number],
        duration = 1 * TRIM[TRAILING 'Secs' FROM @duration],
        addr = NULLIF[@addr, 'null'],
        pin  = NULLIF[@pin, 'null'],
        city = NULLIF[@city, 'null'],
        state = NULLIF[@state, 'null'],
        country = NULLIF[@country, 'null'] 
    
    4 trong bảng của bạn thuộc loại dữ liệu
    LOAD DATA INFILE 'detection.csv'
    INTO TABLE calldetections
    FIELDS TERMINATED BY ','
    OPTIONALLY ENCLOSED BY '"' 
    LINES TERMINATED BY ',,,\r\n'
    IGNORE 1 LINES 
    [@date, name, type, @number, @duration, @addr, @pin, @city, @state, @country, lat, log]
    SET date = STR_TO_DATE[@date, '%b-%d-%Y %h:%i:%s %p'],
        number = TRIM[BOTH '\'' FROM @number],
        duration = 1 * TRIM[TRAILING 'Secs' FROM @duration],
        addr = NULLIF[@addr, 'null'],
        pin  = NULLIF[@pin, 'null'],
        city = NULLIF[@city, 'null'],
        state = NULLIF[@state, 'null'],
        country = NULLIF[@country, 'null'] 
    
    5 thì nó cần được chuyển đổi, nếu không bạn sẽ gặp lỗi

    Giá trị DateTime không chính xác: 'Tháng 9-18-2013 01:53:45 PM' cho cột 'ngày' ở hàng

  2. Bạn phải đối phó với các Qoutes đơn xung quanh các giá trị trong trường

    LOAD DATA INFILE 'detection.csv'
    INTO TABLE calldetections
    FIELDS TERMINATED BY ','
    OPTIONALLY ENCLOSED BY '"' 
    LINES TERMINATED BY ',,,\r\n'
    IGNORE 1 LINES 
    [@date, name, type, @number, @duration, @addr, @pin, @city, @state, @country, lat, log]
    SET date = STR_TO_DATE[@date, '%b-%d-%Y %h:%i:%s %p'],
        number = TRIM[BOTH '\'' FROM @number],
        duration = 1 * TRIM[TRAILING 'Secs' FROM @duration],
        addr = NULLIF[@addr, 'null'],
        pin  = NULLIF[@pin, 'null'],
        city = NULLIF[@city, 'null'],
        state = NULLIF[@state, 'null'],
        country = NULLIF[@country, 'null'] 
    
    1

  3. Bạn rất có thể muốn thay đổi

    LOAD DATA INFILE 'detection.csv'
    INTO TABLE calldetections
    FIELDS TERMINATED BY ','
    OPTIONALLY ENCLOSED BY '"' 
    LINES TERMINATED BY ',,,\r\n'
    IGNORE 1 LINES 
    [@date, name, type, @number, @duration, @addr, @pin, @city, @state, @country, lat, log]
    SET date = STR_TO_DATE[@date, '%b-%d-%Y %h:%i:%s %p'],
        number = TRIM[BOTH '\'' FROM @number],
        duration = 1 * TRIM[TRAILING 'Secs' FROM @duration],
        addr = NULLIF[@addr, 'null'],
        pin  = NULLIF[@pin, 'null'],
        city = NULLIF[@city, 'null'],
        state = NULLIF[@state, 'null'],
        country = NULLIF[@country, 'null'] 
    
    7 Chuỗi theo nghĩa đen thành thực tế
    LOAD DATA INFILE 'detection.csv'
    INTO TABLE calldetections
    FIELDS TERMINATED BY ','
    OPTIONALLY ENCLOSED BY '"' 
    LINES TERMINATED BY ',,,\r\n'
    IGNORE 1 LINES 
    [@date, name, type, @number, @duration, @addr, @pin, @city, @state, @country, lat, log]
    SET date = STR_TO_DATE[@date, '%b-%d-%Y %h:%i:%s %p'],
        number = TRIM[BOTH '\'' FROM @number],
        duration = 1 * TRIM[TRAILING 'Secs' FROM @duration],
        addr = NULLIF[@addr, 'null'],
        pin  = NULLIF[@pin, 'null'],
        city = NULLIF[@city, 'null'],
        state = NULLIF[@state, 'null'],
        country = NULLIF[@country, 'null'] 
    
    8 cho các cột
    LOAD DATA INFILE 'detection.csv'
    INTO TABLE calldetections
    FIELDS TERMINATED BY ','
    OPTIONALLY ENCLOSED BY '"' 
    LINES TERMINATED BY ',,,\r\n'
    IGNORE 1 LINES 
    [@date, name, type, @number, @duration, @addr, @pin, @city, @state, @country, lat, log]
    SET date = STR_TO_DATE[@date, '%b-%d-%Y %h:%i:%s %p'],
        number = TRIM[BOTH '\'' FROM @number],
        duration = 1 * TRIM[TRAILING 'Secs' FROM @duration],
        addr = NULLIF[@addr, 'null'],
        pin  = NULLIF[@pin, 'null'],
        city = NULLIF[@city, 'null'],
        state = NULLIF[@state, 'null'],
        country = NULLIF[@country, 'null'] 
    
    9

  4. Nếu thời lượng luôn luôn trong vài giây thì bạn có thể trích xuất giá trị số nguyên của giây và lưu trữ nó theo cách đó trong bảng của bạn để có thể dễ dàng tổng hợp các giá trị thời lượng sau này.

Điều đó được nói là một phiên bản hữu ích của câu lệnh sẽ trông giống như thế này

LOAD DATA INFILE 'detection.csv'
INTO TABLE calldetections
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY ',,,\r\n'
IGNORE 1 LINES 
[@date, name, type, @number, @duration, @addr, @pin, @city, @state, @country, lat, log]
SET date = STR_TO_DATE[@date, '%b-%d-%Y %h:%i:%s %p'],
    number = TRIM[BOTH '\'' FROM @number],
    duration = 1 * TRIM[TRAILING 'Secs' FROM @duration],
    addr = NULLIF[@addr, 'null'],
    pin  = NULLIF[@pin, 'null'],
    city = NULLIF[@city, 'null'],
    state = NULLIF[@state, 'null'],
    country = NULLIF[@country, 'null'] 

Dưới đây là kết quả của việc thực hiện truy vấn trên máy của tôi

mysql> LOAD DATA INFILE '/tmp/detection.csv'
    -> INTO TABLE calldetections
    -> FIELDS TERMINATED BY ','
    -> OPTIONALLY ENCLOSED BY '"' 
    -> LINES TERMINATED BY ',,,\n'
    -> IGNORE 1 LINES 
    -> [@date, name, type, @number, @duration, @addr, @pin, @city, @state, @country, lat, log]
    -> SET date = STR_TO_DATE[@date, '%b-%d-%Y %h:%i:%s %p'],
    ->     number = TRIM[BOTH '\'' FROM @number],
    ->     duration = 1 * TRIM[TRAILING 'Secs' FROM @duration],
    ->     addr = NULLIF[@addr, 'null'],
    ->     pin  = NULLIF[@pin, 'null'],
    ->     city = NULLIF[@city, 'null'],
    ->     state = NULLIF[@state, 'null'],
    ->     country = NULLIF[@country, 'null'];
Query OK, 3 rows affected [0.00 sec]
Records: 3  Deleted: 0  Skipped: 0  Warnings: 0

mysql> select * from calldetections;
+---------------------+---------+---------------+-------------+----------+------+------+------+-------+---------+------+------+
| date                | name    | type          | number      | duration | addr | pin  | city | state | country | lat  | log  |
+---------------------+---------+---------------+-------------+----------+------+------+------+-------+---------+------+------+
| 2013-09-18 13:53:45 | Unknown | outgoing call | 123456      |        0 | NULL | NULL | NULL | NULL  | NULL    | 0.0  | 0.0  |
| 2013-09-18 13:54:14 | Unknown | outgoing call | 1234567890  |        0 | NULL | NULL | NULL | NULL  | NULL    | 0.0  | 0.0  |
| 2013-09-18 13:54:37 | Unknown | outgoing call | 14772580369 |        1 | NULL | NULL | NULL | NULL  | NULL    | 0.0  | 0.0  |
+---------------------+---------+---------------+-------------+----------+------+------+------+-------+---------+------+------+
3 rows in set [0.00 sec]

Và cuối cùng trong PHP gán một chuỗi truy vấn cho biến

mysql> LOAD DATA INFILE '/tmp/detection.csv'
    -> INTO TABLE calldetections
    -> FIELDS TERMINATED BY ','
    -> OPTIONALLY ENCLOSED BY '"' 
    -> LINES TERMINATED BY ',,,\n'
    -> IGNORE 1 LINES 
    -> [@date, name, type, @number, @duration, @addr, @pin, @city, @state, @country, lat, log]
    -> SET date = STR_TO_DATE[@date, '%b-%d-%Y %h:%i:%s %p'],
    ->     number = TRIM[BOTH '\'' FROM @number],
    ->     duration = 1 * TRIM[TRAILING 'Secs' FROM @duration],
    ->     addr = NULLIF[@addr, 'null'],
    ->     pin  = NULLIF[@pin, 'null'],
    ->     city = NULLIF[@city, 'null'],
    ->     state = NULLIF[@state, 'null'],
    ->     country = NULLIF[@country, 'null'];
Query OK, 3 rows affected [0.00 sec]
Records: 3  Deleted: 0  Skipped: 0  Warnings: 0

mysql> select * from calldetections;
+---------------------+---------+---------------+-------------+----------+------+------+------+-------+---------+------+------+
| date                | name    | type          | number      | duration | addr | pin  | city | state | country | lat  | log  |
+---------------------+---------+---------------+-------------+----------+------+------+------+-------+---------+------+------+
| 2013-09-18 13:53:45 | Unknown | outgoing call | 123456      |        0 | NULL | NULL | NULL | NULL  | NULL    | 0.0  | 0.0  |
| 2013-09-18 13:54:14 | Unknown | outgoing call | 1234567890  |        0 | NULL | NULL | NULL | NULL  | NULL    | 0.0  | 0.0  |
| 2013-09-18 13:54:37 | Unknown | outgoing call | 14772580369 |        1 | NULL | NULL | NULL | NULL  | NULL    | 0.0  | 0.0  |
+---------------------+---------+---------------+-------------+----------+------+------+------+-------+---------+------+------+
3 rows in set [0.00 sec]
0 sẽ trông như thế này

$sql = "LOAD DATA INFILE 'detection.csv'
        INTO TABLE calldetections
        FIELDS TERMINATED BY ','
        OPTIONALLY ENCLOSED BY '\"' 
        LINES TERMINATED BY ',,,\\r\\n'
        IGNORE 1 LINES 
        [@date, name, type, @number, @duration, @addr, @pin, @city, @state, @country, lat, log]
        SET date = STR_TO_DATE[@date, '%b-%d-%Y %h:%i:%s %p'],
            number = TRIM[BOTH '\'' FROM @number],
            duration = 1 * TRIM[TRAILING 'Secs' FROM @duration],
            addr = NULLIF[@addr, 'null'],
            pin  = NULLIF[@pin, 'null'],
            city = NULLIF[@city, 'null'],
            state = NULLIF[@state, 'null'],
            country = NULLIF[@country, 'null'] ";

Làm cách nào để nhập dữ liệu CSV vào cơ sở dữ liệu MySQL bằng PHP?

Cú pháp với từng bước:..
Tạo kết nối với cơ sở dữ liệu.
Lấy tệp CSV bằng hàm fopen. Nó được sử dụng để mở một tập tin. fopen [tên tệp, chế độ, bao gồm_path, bối cảnh] ở đây: ....
Nhận tệp CSV: Chúng tôi có thể nhận tệp CSV bằng hàm fgetcsv [] ..
Truy vấn cơ sở dữ liệu ..

Làm cách nào để nhập tệp CSV vào cơ sở dữ liệu MySQL?

Trong danh sách định dạng, chọn CSV. Thay đổi các tùy chọn cụ thể định dạng. Nếu tệp CSV được phân tách bởi một ký tự không phải là dấu phẩy hoặc nếu có các thông số kỹ thuật khác cho các tệp CSV, chúng ta có thể thay đổi nó trong phần này. Nhấp vào Đi để bắt đầu nhập tệp CSV và dữ liệu sẽ được nhập thành công vào MySQL.

Làm cách nào để chèn các cột đã chọn từ tệp CSV vào cơ sở dữ liệu MySQL bằng cách sử dụng dữ liệu tải Infile?

Mã như thế này: Tải dữ liệu Infile '/path/filename.csv' vào bảng bảng_name các trường bị chấm dứt bởi ',' Các dòng bị chấm dứt bởi '\ r \ n' [cột_name3, cột_name5];Ở đây bạn đi với việc thêm dữ liệu vào chỉ hai cột [bạn có thể chọn chúng với tên của cột] vào bảng.LOAD DATA INFILE '/path/filename. csv' INTO TABLE table_name FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' [column_name3, column_name5]; Here you go with adding data to only two columns[you can choose them with the name of the column] to the table.

Làm thế nào để bạn tải dữ liệu vào bảng MySQL?

TXT vào bảng PET, sử dụng câu lệnh này:..
mysql> tải dữ liệu cục bộ '/path/pet.txt 'vào bàn cưng;....
mysql> tải dữ liệu cục bộ '/path/pet.txt 'vào bảng các dòng thú cưng bị chấm dứt bởi' \ r \ n ';....
mysql> chèn vào các giá trị thú cưng ['puffball', 'diiane', 'hamster', 'f', '1999-03-30', null] ;.

Bài Viết Liên Quan

Chủ Đề