sql >> Base de Datos >  >> RDS >> Mysql

Cargue un archivo csv con columnas específicas usando PDO

Como se documenta en LOAD DATA INFILE Sintaxis :

En otras palabras, la lista de columnas debe describir las columnas de la base de datos (o variables de usuario) a las que cada los campos de entrada debe asignarse (en lugar de describir en qué campo de entrada se puede encontrar cada columna de la base de datos). Esto es, por supuesto, obvio cuando uno se da cuenta de que el archivo de entrada no necesita contener nombres de campo y, por lo tanto, sería imposible adoptar este último enfoque en todas las circunstancias.

Por lo tanto, desea:

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

También deberá agregar IGNORE 1 LINES al comando para saltar la primera línea (con nombres 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);