sql >> Databasteknik >  >> RDS >> Mysql

PHP:LOAD DATA INFILE syntaxfel

INTO TABLE '$this->table'

Använd inte enstaka citattecken för att citera ett tabellnamn. Enstaka citattecken är för strängtexter eller date literals .
Använd inga citattecken, annars back-ticks för avgränsade identifierare .

INTO TABLE `$this->table`

Angående din kommentar:

Du tog tydligen bort citat från båda filnamnet och tabellnamnet. Det var inte det jag menade. Ta bara bort citattecken från tabellnamnet. Du behöver dem för filnamnet.

Exempel:

$sql = "LOAD DATA LOCAL INFILE '$this->file'
    INTO TABLE `$this->table`
    FIELDS TERMINATED BY ','
    LINES TERMINATED BY '\\n'
    OPTIONALLY ENCLOSED BY '\"'
    ($columns)";

Granska syntaxen som finns dokumenterad på http://dev.mysql. com/doc/refman/5.6/en/load-data.html

Lägg märke till närvaron eller frånvaron av citattecken runt INFILE 'file_name' och INTO TABLE tbl_name :

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
    [REPLACE | IGNORE]
    INTO TABLE tbl_name

Du behöver faktiskt inte ha bakåtmarkeringarna runt tabellnamnet, om inte ditt tabellnamn innehåller specialtecken, blanksteg eller reserverade ord.

Du fick det här felet:

Höger, inte alla SQL-kommandon är kompatibla med prepare() . Jag kontrollerade inte det för ditt fall, eftersom vi först löste syntaxfelet. Du kan hitta en lista över kommandon som kan prepare() d under rubriken SQL-syntax tillåten i förberedda uttalanden på denna sida:http://dev .mysql.com/doc/refman/5.6/en/sql-syntax-prepared-statements.html

Jag länkade till MySQL 5.6-dokumenten, men du bör besöka dokumenten för den version av MySQL du använder. Eftersom listan över kompatibla kommandon ändras från utgåva till utgåva.

Så du kan inte använda prepare() -- du måste använda exec() eller query() istället för en LOAD DATA INFILE kommando.

Alternativt, om du använder PDO, kan du ställa in attributet PDO::ATTR_EMULATE_PREPARES till true . Det kommer att göra att PDO fejkar ut MySQL, så prepare() är en no-op och frågan skickas faktiskt under execute().



  1. Implementering av MySQL Hashing-funktion

  2. Hur man ändrar flera kolumner samtidigt i SQL Server

  3. Postgresql -- städa HTML-taggar i mitten av strängen

  4. Använder Python och MySQL i ETL-processen