sql >> Database teknologi >  >> RDS >> Mysql

PHP:LOAD DATA INFILE syntaksfejl

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



  1. Postgresql-forbindelsespooling i Erlang

  2. BESTIL EFTER dato med tidligere datoer efter kommende datoer

  3. Lower()-funktionen på internationale tegn i postgresql

  4. Mysql dynamisk værdi som alias