IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

php et LOAD DATA INFILE


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 45
    Par défaut php et LOAD DATA INFILE
    Bonjour,

    je n'arrive pas à insérer les données d'un fichier csv dans une base mysql.

    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?php
     
    	try {
    	        $bdd = new PDO('mysql:host=localhost; dbname=care', 'root', 'root', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, PDO::MYSQL_ATTR_LOCAL_INFILE => true));
    	    } catch (Exception $e) {
    	        die('Erreur : ' . $e->getMessage());
    	    }
     
     
    	    $requete = ("LOAD DATA LOCAL INFILE 'monchemin\fichier.csv'
    	    INTO TABLE tab_identification (@dummy, sexe, dateNaissance, prenom, nom, @dummy, @dummy, @dummy, @dummy, @dummy, @dummy, @dummy)
    	    FIELDS TERMINATED BY ';'
    		LINES TERMINATED BY '\\r\\n'
    	    IGNORE 1 LINES;");
    	    echo $requete;
    	    $prepared = $bdd->prepare($requete);
    	    $prepared->execute();
     
     
    ?>
    L'echo de ma requête me dit que ma requête semble bonne.

    Voici l'erreur généré par php:
    Nom : erreur_php.png
Affichages : 558
Taille : 28,1 Ko

    Une idée de ce qui ne va pas?
    Merci!

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 45
    Par défaut
    Problème résolu!!

    J'ai changé la place de la parenthèse avec les noms de colonne, en la plaçant à la fin de ma requête.
    Et j'ai échappé mon chemin d'accès avec plusieurs \

  3. #3
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    3 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 3 002
    Par défaut
    Entre double quotes \f est interprété en tant que séquence d'échappement correspondant au caractère ascii Form Feed (caractère qui jadis envoyé à une imprimante, la forçait à avancer jusqu'à la page suivante). Pour représenter un antislash entre double quotes, tu dois l'échapper d'un autre antislash et donc écrire \\.

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 45
    Par défaut
    Oui je viens de remarquer ça!

    Bon alors ça c'est la 1ere étape.
    Maintenant il faut que je contsruise un algo plus complexe: ma table va recevoir des données de plusieurs fichiers. J'aimerais pouvoir supprimer les doublons dès l'importation.
    Une piste pour que je puisse faire ça?
    (je suis débutant en php)
    sachant que si j'ajoute un replace avant into table, j'ai une erreur: "Uncaught PDOException: SQLSTATE[01000]: Warning: 1262 Row 21 was truncated; it contained more data than there were input columns"

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 45
    Par défaut
    ok le replace marche: je n'avais pas compté correctement les colonnes de mon csv...

    Par contre, replace ne supprime pas les doublons à l'import. J'imagine que ça compare seulement les données une fois en base...

    Edit: le replace n'empêche pas l'ajout de doublons après un 1er import...

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 45
    Par défaut
    Ok niquel: il fallait juste mettre un index!

    Je ne met pas encore en résolu, si j'ai un autre soucis je reviens vers vous!

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2018
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2018
    Messages : 45
    Par défaut
    Bonsoir!

    Il ne faisait pas de doute que j'allais revenir vers vous très vite...^^

    J'ai un soucis au niveau de la gestion des doublons avec une clé primaire en auto-increment:
    à partir de mon csv, j'importe des champs qui ne constituent pas ma clé primaire. Ma clé primaire est un autre champ de ma table mysql, en auto-incrément. Or, à cause de cet auto-incrément, je ne supprime plus les doublons avec mon load data infile...replace into table...

    Une idée de comment supprimer les doublons à l'import, tt en ayant une clé primaire en auto-incrément?


    PS: peut être qu'un modérateur pourrait déplacer mon msg dans "PHP et BDD"? pas sûr d'avoir posté au bon endroit...

Discussions similaires

  1. [MySQL] Syntaxe requête LOAD DATA INFILE avec php
    Par yann123456 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 19/08/2010, 00h40
  2. [mysql/php]load Data Infile Pb
    Par toniox dans le forum Requêtes
    Réponses: 13
    Dernier message: 26/06/2006, 17h00
  3. probleme avec "LOAD DATA INFILE" et les b
    Par Koo dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/07/2004, 10h37
  4. Problème avec LOAD DATA INFILE
    Par ka0z dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 04/06/2004, 15h59
  5. petit soucis lors d'un LOAD DATA INFILE
    Par Jovial dans le forum SQL Procédural
    Réponses: 9
    Dernier message: 04/06/2004, 12h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo