INTO TABLE '$this->table'
Brug ikke enkelte anførselstegn til at citere et tabelnavn. Enkelte anførselstegn er for strengliterals
eller datoliterals
.
Brug enten ingen anførselstegn, eller også back-ticks for afgrænsede identifikatorer
.
INTO TABLE `$this->table`
Om din kommentar:
Du har åbenbart fjernet citater fra begge filnavnet og tabelnavnet. Det var ikke det, jeg mente. Bare fjern anførselstegnene fra tabelnavnet. Du skal bruge dem til filnavnet.
Eksempel:
$sql = "LOAD DATA LOCAL INFILE '$this->file'
INTO TABLE `$this->table`
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\\n'
OPTIONALLY ENCLOSED BY '\"'
($columns)";
Gennemgå syntaksen, der er dokumenteret på http://dev.mysql. com/doc/refman/5.6/en/load-data.html
Bemærk tilstedeværelsen eller fraværet af citater omkring INFILE 'file_name'
og INTO TABLE tbl_name
:
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
Du behøver faktisk ikke flueben rundt om bordnavnet, medmindre dit bordnavn indeholder specialtegn, mellemrum eller reserverede ord.
Du får denne fejl:
Okay, ikke alle SQL-kommandoer er kompatible med prepare()
. Jeg tjekkede det ikke for din sag, fordi vi først løste syntaksfejlen. Du kan finde en liste over de kommandoer, der kan være prepare()
d under overskriften SQL-syntaks tilladt i forberedte erklæringer på denne side:http://dev .mysql.com/doc/refman/5.6/en/sql-syntax-prepared-statements.html
Jeg linkede til MySQL 5.6-dokumenterne, men du bør besøge dokumenterne for den version af MySQL, du bruger. Fordi listen over kompatible kommandoer ændres fra udgivelse til udgivelse.
Så du kan ikke bruge prepare()
-- du skal bruge exec()
eller query()
i stedet for en LOAD DATA INFILE
kommando.
Alternativt, hvis du bruger PDO, kan du indstille attributten PDO::ATTR_EMULATE_PREPARES
til true
. Det vil få PDO til at forfalske MySQL, så prepare() er en no-op, og forespørgslen sendes faktisk under execute().