Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Carregar um arquivo csv com colunas específicas usando PDO


Conforme documentado em LOAD DATA INFILE Sintaxe :

Em outras palavras, a lista de colunas deve descrever as colunas do banco de dados (ou variáveis ​​de usuário) para as quais cada os campos de entrada deve ser atribuído (em vez de descrever em qual campo de entrada cada coluna do banco de dados pode ser encontrada). Isso é óbvio quando se percebe que o arquivo de entrada não precisa conter nomes de campo e, portanto, seria impossível adotar a última abordagem em todas as circunstâncias.

Portanto, você deseja:
$columns = '(vendor_id, receiver_no, purchase_order_no, destination, po_status)';

Você também precisará adicionar IGNORE 1 LINES ao comando para pular a primeira linha (com nomes de campo):
$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);