INTO TABLE '$this->table'
K uvozování názvu tabulky nepoužívejte jednoduché uvozovky. Jednoduché uvozovky jsou pro řetězcové literály
nebo datové literály
.
Buď nepoužívejte uvozovky, nebo back-ticks pro identifikátory s oddělovači
.
INTO TABLE `$this->table`
K vašemu komentáři:
Zjevně jste odstranili uvozovky z obou název souboru a název tabulky. Tohle jsem nemyslel. Stačí odstranit řetězcové uvozovky z názvu tabulky. Potřebujete je pro název souboru.
Příklad:
$sql = "LOAD DATA LOCAL INFILE '$this->file'
INTO TABLE `$this->table`
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\\n'
OPTIONALLY ENCLOSED BY '\"'
($columns)";
Projděte si syntaxi zdokumentovanou na http://dev.mysql. com/doc/refman/5.6/en/load-data.html
Všimněte si přítomnosti nebo absence uvozovek kolem INFILE 'file_name'
a INTO TABLE tbl_name
:
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
Ve skutečnosti nepotřebujete zadní zaškrtnutí kolem názvu tabulky, pokud název tabulky neobsahuje speciální znaky, mezery nebo vyhrazená slova.
Máte tuto chybu:
Správně, ne všechny příkazy SQL jsou kompatibilní s prepare()
. Ve vašem případě jsem to nekontroloval, protože jsme nejprve řešili chybu syntaxe. Můžete najít seznam příkazů, které lze prepare()
d pod nadpisem Syntaxe SQL povolena v připravených příkazech na této stránce:http://dev .mysql.com/doc/refman/5.6/en/sql-syntax-prepared-statements.html
Propojil jsem se s dokumenty MySQL 5.6, ale měli byste navštívit dokumenty pro verzi MySQL, kterou používáte. Protože seznam kompatibilních příkazů se od vydání k vydání mění.
Nemůžete tedy použít prepare()
-- budete muset použít exec()
nebo query()
místo pro LOAD DATA INFILE
příkaz.
Alternativně, pokud používáte PDO, můžete nastavit atribut PDO::ATTR_EMULATE_PREPARES
true
. To způsobí, že PDO předstírá MySQL, takže Prepare() je neoperativní a dotaz je ve skutečnosti odeslán během execute().