sql >> Databáze >  >> RDS >> Mysql

PHP:Chyby syntaxe LOAD DATA INFILE

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().



  1. jak získat tento výsledek pomocí dotazu Oracle v hierarchické struktuře

  2. ORDER BY ... POUŽITÍ klauzule v PostgreSQL

  3. Umístění konfiguračního souboru MySQL (tj.:my.cnf) není specifikováno

  4. MySQL MariaDB – Dotaz pomocí Temp Table