INTO TABLE '$this->table'
Не използвайте единични кавички, за да цитирате име на таблица. Единичните кавички са за низови литерали
или литерали за дата
.
Или не използвайте кавички, или отбелязва обратно за разграничени идентификатори
.
INTO TABLE `$this->table`
Re your comment:
Очевидно сте премахнали кавички от и двете името на файла и името на таблицата. Не това имах предвид. Просто премахнете кавичките на низа от името на таблицата. Имате нужда от тях за името на файла.
Пример:
$sql = "LOAD DATA LOCAL INFILE '$this->file'
INTO TABLE `$this->table`
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\\n'
OPTIONALLY ENCLOSED BY '\"'
($columns)";
Прегледайте синтаксиса, документиран на http://dev.mysql. com/doc/refman/5.6/en/load-data.html
Забележете наличието или отсъствието на кавички около INFILE 'file_name'
и INTO TABLE tbl_name
:
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
Всъщност нямате нужда от обратни отметки около името на таблицата, освен ако името на таблицата ви не съдържа специални знаци, интервали или запазени думи.
Получавате тази грешка:
Точно така, не всички SQL команди са съвместими с prepare()
. Не проверих това за вашия случай, защото първо разрешавахме синтактичната грешка. Можете да намерите списък с командите, които могат да бъдат prepare()
d под заглавието SQL синтаксис, разрешен в подготвени отчети на тази страница:http://dev .mysql.com/doc/refman/5.6/en/sql-syntax-prepared-statements.html
Свързах се с документите за MySQL 5.6, но трябва да посетите документите за версията на MySQL, която използвате. Тъй като списъкът със съвместими команди се променя от издание на издание.
Така че не можете да използвате prepare()
-- ще трябва да използвате exec()
или query()
вместо това за LOAD DATA INFILE
команда.
Като алтернатива, ако използвате PDO, можете да зададете атрибута PDO::ATTR_EMULATE_PREPARES
на true
. Това ще накара PDO да фалшифицира MySQL, така че подготви() е без операция и заявката всъщност се изпраща по време на изпълнение().