INTO TABLE '$this->table'
Gebruik geen enkele aanhalingstekens om een tabelnaam te citeren. Enkele aanhalingstekens zijn voor tekenreeksletters
of datum literals
.
Gebruik geen aanhalingstekens, of anders back-ticks voor gescheiden ID's
.
INTO TABLE `$this->table`
Over uw opmerking:
Je hebt blijkbaar aanhalingstekens verwijderd van beide de bestandsnaam en de tabelnaam. Dit is niet wat ik bedoelde. Verwijder gewoon de string-aanhalingstekens uit de tabelnaam. Je hebt ze wel nodig voor de bestandsnaam.
Voorbeeld:
$sql = "LOAD DATA LOCAL INFILE '$this->file'
INTO TABLE `$this->table`
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\\n'
OPTIONALLY ENCLOSED BY '\"'
($columns)";
Bekijk de syntaxis die is gedocumenteerd op http://dev.mysql. com/doc/refman/5.6/en/load-data.html
Let op de aan- of afwezigheid van aanhalingstekens rond INFILE 'file_name'
en INTO TABLE tbl_name
:
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
U hebt de back-ticks rond de tabelnaam niet echt nodig, tenzij uw tabelnaam speciale tekens, witruimte of gereserveerde woorden bevat.
Je krijgt deze fout:
Juist, niet alle SQL-commando's zijn compatibel met prepare()
. Ik heb dat voor uw geval niet gecontroleerd, omdat we eerst de syntaxisfout aan het oplossen waren. U kunt een lijst vinden met de opdrachten die prepare()
. kunnen zijn d onder de kop SQL-syntaxis toegestaan in voorbereide verklaringen op deze pagina:http://dev .mysql.com/doc/refman/5.6/en/sql-syntax-prepared-statements.html
Ik heb een koppeling gemaakt naar de MySQL 5.6-documenten, maar u moet de documenten bezoeken voor de versie van MySQL die u gebruikt. Omdat de lijst met compatibele commando's van release tot release verandert.
U kunt dus geen gebruik maken van prepare()
-- je moet exec()
. gebruiken of query()
in plaats daarvan voor een LOAD DATA INFILE
opdracht.
Als u PDO gebruikt, kunt u ook het kenmerk PDO::ATTR_EMULATE_PREPARES
instellen naar true
. Dat zorgt ervoor dat PDO MySQL vervalst, dus prepare() is een no-op en de query wordt daadwerkelijk verzonden tijdens execute().