INTO TABLE '$this->table'
Verwenden Sie keine einfachen Anführungszeichen, um einen Tabellennamen zu zitieren. Einfache Anführungszeichen stehen für String-Literale
oder Datumsliterale
.
Verwenden Sie entweder keine Anführungszeichen oder back-ticks für begrenzte Kennungen
.
INTO TABLE `$this->table`
Zu Ihrem Kommentar:
Anscheinend haben Sie Anführungszeichen aus beiden entfernt den Dateinamen und den Tabellennamen. Das habe ich nicht gemeint. Entfernen Sie einfach die Zeichenfolge-Anführungszeichen aus dem Tabellennamen. Sie benötigen sie für den Dateinamen.
Beispiel:
$sql = "LOAD DATA LOCAL INFILE '$this->file'
INTO TABLE `$this->table`
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\\n'
OPTIONALLY ENCLOSED BY '\"'
($columns)";
Überprüfen Sie die unter http://dev.mysql dokumentierte Syntax. com/doc/refman/5.6/en/load-data.html
Beachten Sie das Vorhandensein oder Fehlen von Anführungszeichen um INFILE 'file_name'
und INTO TABLE tbl_name
:
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
Sie brauchen eigentlich keine Backticks um den Tabellennamen herum, es sei denn, Ihr Tabellenname enthält Sonderzeichen, Leerzeichen oder reservierte Wörter.
Sie haben diesen Fehler erhalten:
Richtig, nicht alle SQL-Befehle sind mit prepare()
kompatibel . Ich habe das für Ihren Fall nicht überprüft, weil wir zuerst den Syntaxfehler behoben haben. Sie können eine Liste der Befehle finden, die prepare()
sein können d unter der Überschrift SQL-Syntax in vorbereiteten Anweisungen erlaubt auf dieser Seite:http://dev .mysql.com/doc/refman/5.6/en/sql-syntax-prepared-statements.html
Ich habe die MySQL 5.6-Dokumentation verlinkt, aber Sie sollten die Dokumentation für die von Ihnen verwendete MySQL-Version besuchen. Weil sich die Liste der kompatiblen Befehle von Release zu Release ändert.
Sie können also prepare()
nicht verwenden -- Sie müssen exec()
verwenden oder query()
stattdessen für ein LOAD DATA INFILE
Befehl.
Wenn Sie PDO verwenden, können Sie alternativ das Attribut PDO::ATTR_EMULATE_PREPARES
setzen auf true
. Das wird PDO dazu bringen, MySQL vorzutäuschen, also ist Prepare() ein No-Op und die Abfrage wird tatsächlich während der Ausführung() gesendet.