INTO TABLE '$this->table'
Não use aspas simples para citar um nome de tabela. Aspas simples são para literais de string ou literais de data .
Não use aspas ou back-ticks para identificadores delimitados .
INTO TABLE `$this->table`
Re seu comentário:
Você aparentemente removeu citações de ambos o nome do arquivo e o nome da tabela. Não foi isso que eu quis dizer. Basta remover as aspas de string do nome da tabela. Você precisa deles para o nome do arquivo.
Exemplo:
$sql = "LOAD DATA LOCAL INFILE '$this->file'
INTO TABLE `$this->table`
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\\n'
OPTIONALLY ENCLOSED BY '\"'
($columns)";
Revise a sintaxe documentada em http://dev.mysql. com/doc/refman/5.6/en/load-data.html
Observe a presença ou ausência de aspas em torno de
INFILE 'file_name'
e INTO TABLE tbl_name
:LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
Na verdade, você não precisa de back-ticks ao redor do nome da tabela, a menos que o nome da sua tabela contenha caracteres especiais, espaços em branco ou palavras reservadas.
Você recebeu este erro:
Certo, nem todos os comandos SQL são compatíveis com
prepare()
. Eu não verifiquei isso para o seu caso, porque estávamos resolvendo o erro de sintaxe primeiro. Você pode encontrar uma lista dos comandos que podem ser prepare()
d sob o título Sintaxe SQL permitida em instruções preparadas nesta página:http://dev .mysql.com/doc/refman/5.6/en/sql-syntax-prepared-statements.html
Eu vinculei aos documentos do MySQL 5.6, mas você deve visitar os documentos da versão do MySQL que você usa. Porque a lista de comandos compatíveis muda de versão para versão.
Então você não pode usar
prepare()
-- você terá que usar exec()
ou query()
em vez de um LOAD DATA INFILE
comando. Alternativamente, se você estiver usando PDO, você pode definir o atributo
PDO::ATTR_EMULATE_PREPARES
para true
. Isso fará com que o PDO falsifice o MySQL, então prepare() é um no-op e a consulta é realmente enviada durante execute().