Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

PHP:erros de sintaxe LOAD DATA INFILE

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().