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 ;Lorsque je lance mon script sql directement dans la console mysql, tout va bien. Les valeurs de idTypeCompte et idPromotion se mette bien à jour.
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"
# Résultat via mysql
idUserTest idTypeCompte idPromotion nom prenom 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 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.
Partager