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å https://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:https://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().