Mysql
 sql >> Base de données >  >> RDS >> Mysql

Charger un fichier csv avec des colonnes spécifiques à l'aide de PDO

Comme documenté sous LOAD DATA INFILE Syntaxe :

En d'autres termes, la liste des colonnes doit décrire les colonnes de la base de données (ou variables utilisateur) auxquelles chacun les champs de saisie doit être attribué (plutôt que de décrire dans quel champ de saisie chaque colonne de la base de données peut être trouvée). Ceci est bien sûr évident lorsque l'on se rend compte que le fichier d'entrée n'a pas besoin de contenir des noms de champs et qu'il serait donc impossible d'adopter cette dernière approche en toutes circonstances.

Par conséquent, vous voulez :

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

Vous devrez également ajouter IGNORE 1 LINES à la commande pour sauter la première ligne (avec les noms des champs) :

$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);