INTO TABLE '$this->table'
Không sử dụng dấu ngoặc kép để trích dẫn tên bảng. Dấu ngoặc kép dành cho chuỗi ký tự
hoặc ký tự ngày
.
Không sử dụng dấu ngoặc kép hoặc cách khác dấu tích lùi cho các số nhận dạng được phân tách
.
INTO TABLE `$this->table`
Nhận xét lại của bạn:
Dường như bạn đã xóa dấu ngoặc kép khỏi cả hai tên tệp và tên bảng. Đây không phải là những gì tôi muốn nói. Chỉ cần xóa dấu ngoặc kép khỏi tên bảng. Bạn cần chúng cho tên tệp.
Ví dụ:
$sql = "LOAD DATA LOCAL INFILE '$this->file'
INTO TABLE `$this->table`
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\\n'
OPTIONALLY ENCLOSED BY '\"'
($columns)";
Xem lại cú pháp được ghi lại tại http://dev.mysql. com / doc / refman / 5.6 / en / load-data.html
Lưu ý sự hiện diện hoặc vắng mặt của dấu ngoặc kép xung quanh INFILE 'file_name'
và INTO TABLE tbl_name
:
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
Bạn không thực sự cần dấu tích lại xung quanh tên bảng, trừ khi tên bảng của bạn chứa các ký tự đặc biệt, khoảng trắng hoặc các từ dành riêng.
Bạn gặp lỗi này:
Đúng vậy, không phải tất cả các lệnh SQL đều tương thích với prepare()
. Tôi đã không kiểm tra điều đó cho trường hợp của bạn, vì trước tiên chúng tôi đang giải quyết lỗi cú pháp. Bạn có thể tìm thấy danh sách các lệnh có thể là prepare()
d dưới tiêu đề Cú pháp SQL được phép trong các câu lệnh soạn sẵn trên trang này: http:// dev .mysql.com / doc / refman / 5.6 / vi / sql-Cú pháp-Chuẩn bị-Câu lệnh.html
Tôi đã liên kết với tài liệu MySQL 5.6, nhưng bạn nên truy cập tài liệu cho phiên bản MySQL bạn sử dụng. Bởi vì danh sách các lệnh tương thích thay đổi từ bản phát hành sang bản phát hành.
Vì vậy, bạn không thể sử dụng prepare()
- bạn sẽ phải sử dụng exec()
hoặc query()
thay vào đó cho LOAD DATA INFILE
yêu cầu.
Ngoài ra, nếu bạn đang sử dụng PDO, bạn có thể đặt thuộc tính PDO::ATTR_EMULATE_PREPARES
thành true
. Điều đó sẽ làm cho PDO giả mạo MySQL, vì vậy, chuẩn bị () là một lựa chọn không cần thiết và truy vấn thực sự được gửi trong quá trình thực thi ().