sql >> Base de Datos >  >> RDS >> Mysql

PHP:LOAD DATA INFILE errores de sintaxis

INTO TABLE '$this->table'

No utilice comillas simples para citar el nombre de una tabla. Las comillas simples son para literales de cadena o literales de fecha .
No use comillas, o bien back-ticks para identificadores delimitados .

INTO TABLE `$this->table`

Re tu comentario:

Al parecer, eliminó las comillas de ambos el nombre del archivo y el nombre de la tabla. Esto no es lo que quise decir. Simplemente elimine las comillas de cadena del nombre de la tabla. Los necesita para el nombre de archivo.

Ejemplo:

$sql = "LOAD DATA LOCAL INFILE '$this->file'
    INTO TABLE `$this->table`
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\\n'
    OPTIONALLY ENCLOSED BY '\"'
    ($columns)";

Revise la sintaxis documentada en http://dev.mysql. com/doc/refman/5.6/en/load-data.html

Observe la presencia o ausencia de comillas alrededor de INFILE 'file_name' y INTO TABLE tbl_name :

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
    [REPLACE | IGNORE]
    INTO TABLE tbl_name

En realidad, no necesita las tildes invertidas alrededor del nombre de la tabla, a menos que el nombre de la tabla contenga caracteres especiales, espacios en blanco o palabras reservadas.

Tienes este error:

Correcto, no todos los comandos SQL son compatibles con prepare() . No revisé eso para su caso, porque estábamos resolviendo el error de sintaxis primero. Puede encontrar una lista de los comandos que pueden ser prepare() d bajo el encabezado Sintaxis SQL permitida en declaraciones preparadas en esta página:http://dev .mysql.com/doc/refman/5.6/en/sql-syntax-prepared-statements.html

Me vinculé a los documentos de MySQL 5.6, pero debe visitar los documentos para la versión de MySQL que usa. Porque la lista de comandos compatibles cambia de una versión a otra.

Entonces no puedes usar prepare() -- tendrás que usar exec() o query() en lugar de un LOAD DATA INFILE dominio.

Alternativamente, si está utilizando PDO, puede establecer el atributo PDO::ATTR_EMULATE_PREPARES a true . Eso hará que PDO falsifique MySQL, por lo que prepare() no funciona y la consulta se envía durante la ejecución().