sql >> Databasteknik >  >> RDS >> Mysql

Ladda en csv-fil med specifika kolumner med PDO

Som dokumenterats under LOAD DATA INFILE Syntax :

Med andra ord bör kolumnlistan beskriva databaskolumnerna (eller användarvariabler) till vilka varje inmatningsfält bör tilldelas (istället för att beskriva i vilket inmatningsfält varje databaskolumn kan hittas). Detta är naturligtvis uppenbart när man inser att indatafilen inte behöver innehålla fältnamn och det skulle därför vara omöjligt att använda det senare tillvägagångssättet under alla omständigheter.

Därför vill du:

$columns = '(vendor_id, receiver_no, purchase_order_no, destination, po_status)';

Du måste också lägga till IGNORE 1 LINES till kommandot för att hoppa över den första raden (med fältnamn):

$affectedRows = $pdo->exec("
    LOAD DATA LOCAL INFILE ".$pdo->quote($csvfile)." INTO TABLE `$databasetable`
      FIELDS TERMINATED BY ".$pdo->quote($fieldseparator)."
      LINES TERMINATED BY ".$pdo->quote($lineseparator)."
      IGNORE 1 LINES ". $columns);


  1. Vad är Option=N i MySQL ODBC-anslutningssträngen?

  2. PHP/MySQL gruppera resultat efter kolumn

  3. Lösningar för hur man läser SQL Server-transaktionsloggfil utan att misslyckas

  4. MySQL främmande nyckel, kan inte skapa tabell (errnr:150)