sql >> Database >  >> RDS >> Mysql

PHP:LOAD DATA INFILE syntaxisfouten

INTO TABLE '$this->table'

Gebruik geen enkele aanhalingstekens om een ​​tabelnaam te citeren. Enkele aanhalingstekens zijn voor tekenreeksletters of datum literals .
Gebruik geen aanhalingstekens, of anders back-ticks voor gescheiden ID's .

INTO TABLE `$this->table`

Over uw opmerking:

Je hebt blijkbaar aanhalingstekens verwijderd van beide de bestandsnaam en de tabelnaam. Dit is niet wat ik bedoelde. Verwijder gewoon de string-aanhalingstekens uit de tabelnaam. Je hebt ze wel nodig voor de bestandsnaam.

Voorbeeld:

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

Bekijk de syntaxis die is gedocumenteerd op http://dev.mysql. com/doc/refman/5.6/en/load-data.html

Let op de aan- of afwezigheid van aanhalingstekens rond INFILE 'file_name' en INTO TABLE tbl_name :

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

U hebt de back-ticks rond de tabelnaam niet echt nodig, tenzij uw tabelnaam speciale tekens, witruimte of gereserveerde woorden bevat.

Je krijgt deze fout:

Juist, niet alle SQL-commando's zijn compatibel met prepare() . Ik heb dat voor uw geval niet gecontroleerd, omdat we eerst de syntaxisfout aan het oplossen waren. U kunt een lijst vinden met de opdrachten die prepare() . kunnen zijn d onder de kop SQL-syntaxis toegestaan ​​in voorbereide verklaringen op deze pagina:http://dev .mysql.com/doc/refman/5.6/en/sql-syntax-prepared-statements.html

Ik heb een koppeling gemaakt naar de MySQL 5.6-documenten, maar u moet de documenten bezoeken voor de versie van MySQL die u gebruikt. Omdat de lijst met compatibele commando's van release tot release verandert.

U kunt dus geen gebruik maken van prepare() -- je moet exec() . gebruiken of query() in plaats daarvan voor een LOAD DATA INFILE opdracht.

Als u PDO gebruikt, kunt u ook het kenmerk PDO::ATTR_EMULATE_PREPARES instellen naar true . Dat zorgt ervoor dat PDO MySQL vervalst, dus prepare() is een no-op en de query wordt daadwerkelijk verzonden tijdens execute().



  1. Oracle heeft standaard NLS_LANG ingesteld

  2. Hoe laat je PyPy, Django en PostgreSQL samenwerken?

  3. MySql Inner Join met WHERE-clausule

  4. Voorwaardelijke INSERT INTO-instructie in postgres