INTO TABLE '$this->table'
Non utilizzare virgolette singole per citare il nome di una tabella. Le virgolette singole sono per stringa letterale
o date letterali
.
O non usare virgolette, oppure back-tick per identificatori delimitati
.
INTO TABLE `$this->table`
Re il tuo commento:
Apparentemente hai rimosso le citazioni da entrambi il nome del file e il nome della tabella. Non è quello che intendevo. Basta rimuovere le virgolette dal nome della tabella. Ti servono per il nome del file.
Esempio:
$sql = "LOAD DATA LOCAL INFILE '$this->file'
INTO TABLE `$this->table`
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\\n'
OPTIONALLY ENCLOSED BY '\"'
($columns)";
Esamina la sintassi documentata su http://dev.mysql. com/doc/refman/5.6/en/load-data.html
Nota la presenza o l'assenza di virgolette intorno a INFILE 'file_name'
e INTO TABLE tbl_name
:
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
In realtà non hai bisogno dei segni di spunta indietro attorno al nome della tabella, a meno che il nome della tabella non contenga caratteri speciali, spazi bianchi o parole riservate.
Hai ricevuto questo errore:
Esatto, non tutti i comandi SQL sono compatibili con prepare()
. Non l'ho verificato per il tuo caso, perché prima stavamo risolvendo l'errore di sintassi. Puoi trovare un elenco dei comandi che possono essere prepare()
d sotto l'intestazione Sintassi SQL consentita nelle istruzioni preparate in questa pagina:http://dev .mysql.com/doc/refman/5.6/en/sql-syntax-prepared-statements.html
Mi sono collegato ai documenti di MySQL 5.6, ma dovresti visitare i documenti per la versione di MySQL che usi. Perché l'elenco dei comandi compatibili cambia da un rilascio all'altro.
Quindi non puoi usare prepare()
-- dovrai usare exec()
o query()
invece per un LOAD DATA INFILE
comando.
In alternativa, se stai usando PDO, puoi impostare l'attributo PDO::ATTR_EMULATE_PREPARES
su true
. Ciò renderà PDO falso MySQL, quindi prepare() è un no-op e la query viene effettivamente inviata durante execute().