[RESOLU] Load data infile

Eléphanteau du PHP | 23 Messages

01 mars 2017, 13:19

Bonjour
j'essaye d'importer un fichier CSV dans une base de donnée.
ca marche simplement il m'ignore la première colonne; c'est a dire la REF1
dans ma base de donnée j'ai crée une structure avec un id objet auto_incrément, je me suis tromper dans les séparateurs ?
$requete = "LOAD DATA LOCAL INFILE '$fichier'
    INTO TABLE commande 
    FIELDS TERMINATED BY ';'
    ENCLOSED BY '\"'
    LINES TERMINATED BY '\n'  IGNORE 1 LINES ";
"reference";"date";"n°commande";"site";"fin"
"REF001";"02/12/16";"0000000001";"site";"#"
"REF002";"02/12/17";"0000000002";"site";"#"
"REF003";"02/12/18";"0000000002";"site";"#"

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 8755 Messages

01 mars 2017, 15:49

salut,

as tu essayé d'indiquer les colonnes ?
cela fonctionne plutôt bien ;)
j'ai utiliser les noms de l'entête pour les nom de colonne, sauf date => ladate (parce qu'utiliser les mots clef dans les noms de colonnes c'est mal ;) )
LOAD DATA LOCAL INFILE 'D:\\dev\\wsphp\\test\\lucafone.csv'
 INTO TABLE commande 
  FIELDS TERMINATED BY ';' 
  ENCLOSED BY '\"'
  LINES TERMINATED BY '\n'  
  IGNORE 1 LINES
  (@reference,@ladate,@numcmd,@site,@fin)
    set
  reference = @reference,
  ladate = @ladate,
  numcmd = @numcmd,
  [email protected],
  fin = @fin
tu trouveras plus d'exemple ici https://dev.mysql.com/doc/refman/5.7/en ... tml#c12474
notamment si ta colonne date est de type date ;)


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 23 Messages

01 mars 2017, 16:32

Super =D> =D> trop fort !
par contre je voudrais lancer un cron, sait tu comment eviter qu'il doublonne les entrée ?
basé sur le numcom par exemple ?

Avatar de l’utilisateur
Modérateur PHPfrance
Modérateur PHPfrance | 8755 Messages

01 mars 2017, 17:13

regarde du coté du mot clef replace ou ignore mais il te faut une clef unique vu que tu ne gère pas la clef primaire

sinon à la main en php avec une SplFileObjet pour lire le csv et PDO et une requête préparée pour l'insertion et la recherche de doublon ( select count(1) as nb from commande where sur tout les champs du fichier csv , si nb == zéro tu insères).

max 20 lignes de code ;)

c'est moins optimisé et rapide que le faire faire par mysql mais ça fonctionne bien.

attention au cron il ne faut pas que intervalle soit plus court que le temps de traitement :)

@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 23 Messages

01 mars 2017, 17:27

bah merde alors la solution que tu ma donné ne marche plus?? c'est ou que j'ai fail ?
les noms des tables sont bonnes...
$requete = "LOAD DATA LOCAL INFILE '$fichier'
INTO TABLE commande 
FIELDS TERMINATED BY ';'
ENCLOSED BY '\"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES 
	
(@reference,@datecmd,@cmdsite,@canal,@commercial,@client,@etat,@numpaiement,@totalttc,@aregler,@blref,@bldate,@factref,@devis,@fin)
    
	set
  
  	reference = @reference,
	datecmd = @datecmd,
	cmdsite = @cmdsite,
	canal = @canal,
	commercial = @commercial,
	client = @client,
	etat = @etat,
	numpaiement = @numpaiement,
	totalttc = @totalttc,
	aregler = @aregler,
	blref = @blref,
	bldate = @bldate,
	factref = @factref,
	devis = @devis,
	fin = @fin
	
	";

Eléphanteau du PHP | 23 Messages

02 mars 2017, 09:34

Bizarre rentré dans l'ordre ce matin sans rien touché.
peut être un problème de droit ?

merci encore