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

PHP & Base de données Discussion :

PDO, LOAD DATA LOCAL INFILE avec multiple SET [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Par défaut PDO, LOAD DATA LOCAL INFILE avec multiple SET
    Bonjour à tous,

    Suite à de très nombreuses recherches et tests, un problème persiste dans ma requête sur la base de données.
    Je dois faire un insert d'un fichier CSV. Jusque là, rien de bien méchant. Sauf que la table dans laquelle s'insert les données possède de nombreuses clés étrangères.

    Voici la table de test, table généré via MySQL Workbench:
    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
    21
    22
    23
    # Table userstest
     
    CREATE TABLE `userstest` (
      `idUserTest` int(11) unsigned NOT NULL AUTO_INCREMENT,
      `idTypeCompte` tinyint(3) unsigned NOT NULL,
      `idPromotion` tinyint(3) unsigned DEFAULT NULL,
      `nom` varchar(50) NOT NULL DEFAULT '',
      `prenom` varchar(50) NOT NULL DEFAULT '',
      `email` varchar(50) NOT NULL DEFAULT '',
      `password` varchar(45) DEFAULT NULL,
      `caution` tinyint(1) NOT NULL DEFAULT '0',
      `ref` varchar(50) DEFAULT '',
      `actif` tinyint(1) DEFAULT '1',
      PRIMARY KEY (`idUserTest`),
      UNIQUE KEY `email_UNIQUE` (`email`),
      UNIQUE KEY `nom_UNIQUE` (`nom`),
      UNIQUE KEY `idUser_UNIQUE` (`idUserTest`),
      UNIQUE KEY `ref_UNIQUE` (`ref`),
      KEY `idTypeCompte` (`idTypeCompte`),
      KEY `idPromotion` (`idPromotion`),
      CONSTRAINT `idPromotion0` FOREIGN KEY (`idPromotion`) REFERENCES `promotions` (`idPromotion`) ON DELETE NO ACTION ON UPDATE NO ACTION,
      CONSTRAINT `idTypeCompte0` FOREIGN KEY (`idTypeCompte`) REFERENCES `typesComptes` (`idTypeCompte`) ON DELETE NO ACTION ON UPDATE NO ACTION
    ) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # script d'insertion
     
    LOAD DATA LOCAL INFILE '/path/to/my/file/18-08-2015_users.csv'
    INTO TABLE userstest
    CHARACTER SET utf8
    FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '/'
    LINES TERMINATED BY '\n' STARTING BY ''
    IGNORE 1 LINES
    (@compte, @promotion, nom, prenom, email, ref)
    SET idTypeCompte = CASE @compte WHEN 'Etudiant' THEN 1 WHEN 'Admin' THEN 2 WHEN 'Enseignant' THEN 3 END,
           idPromotion = CASE @promotion WHEN '1ère Année' THEN 1 WHEN '2ème Année' THEN 2 WHEN '3ème Année' THEN 3 ELSE NULL END ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    # Extrait du cvs
    "compte","promotion","nom","prenom","email","ref"
    "Etudiant","2ème Année","Toto","Toto","toto@test.com","ETU0000"
    "Etudiant","1ère Année","Tata","Tata","tata@test.net","ETU0001"
    "Etudiant","3ème Année","Titi","Titi","titi@test.net","ETU0002"
    "Enseignant","NULL","Enseignant","Enseignant","enseignant@test.com","ENS001"
    "Admin","NULL","Test","Test","admin@test.com","ADM001"
    Lorsque je lance mon script sql directement dans la console mysql, tout va bien. Les valeurs de idTypeCompte et idPromotion se mette bien à jour.
    # Résultat via mysql
    idUserTest idTypeCompte idPromotion nom prenom email password caution ref actif
    1 1 2 Toto Toto toto@test.com NULL 0 ETU0000 1
    2 1 1 Tata Tata tata@test.net NULL 0 ETU0001 1
    3 1 3 Titi Titi titi@test.net NULL 0 ETU0002 1
    4 3 NULL Enseignant Enseignant enseignant@test.com NULL 0 ENS001 1
    5 2 NULL Test Test admin@test.com NULL 0 ADM001 1

    Mais lorsque je le lance via le script PHP qui utilise PDO (activation de PDO::MYSQL_ATTR_LOCAL_INFILE mise en place), seul un des deux se mets à jour.
    # Résultat avec PDO
    idUserTest idTypeCompte idPromotion nom prenom email password caution ref actif
    1 1 NULL Toto Toto toto@test.com NULL 0 ETU0000 1
    2 1 NULL Tata Tata tata@test.net NULL 0 ETU0001 1
    3 1 NULL Titi Titi titi@test.net NULL 0 ETU0002 1
    4 3 NULL Enseignant Enseignant enseignant@test.com NULL 0 ENS001 1
    5 2 NULL Test Test admin@test.com NULL 0 ADM001 1

    Avez vous une idée d'où pourrait venir le problème?

    Merci par avance.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Ca ressemble à un problème d'encodage qui fait que le nom des promotions ne correspond pas.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Par défaut
    Pourtant mon fichier est bien en utf8 comme pour la base de données et le script php.
    Par ailleurs, il lui arrive de bien me mettre les promotions, mais de ne pas trouver le type de compte. A ce moment là, il bloque à cause de la clé étrangère idTypeCompte

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Fait un essai sans accents, tu verras bien.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Par défaut
    Merci pour l'idée des accents, ça marche bien!

    Comment je peux faire néanmoins pour en avoir?

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu as bien mis ta connexion en UTF8 ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8'
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 24
    Par défaut
    Je l'avais enlevé sur un de mes tests... Je viens de le remettre et ça fonctionne à la perfection!

    Merci beaucoup sabotage!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/10/2015, 17h56
  2. [PDO] LOAD DATA LOCAL INFILE avec PDO MySql
    Par ultimus dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 01/07/2015, 11h54
  3. Syntaxe LOAD DATA LOCAL INFILE avec CSV
    Par armand6464 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 15/01/2015, 14h27
  4. Insertion avec LOAD DATA LOCAL INFILE
    Par Krys006 dans le forum Débuter
    Réponses: 2
    Dernier message: 04/05/2008, 16h40
  5. probleme avec <<load data local infile etc>> errcode: 2
    Par oumaridia dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 11/11/2007, 08h13

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