Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/09/2011, 00h26   #1
Membre régulier
 
Inscription : août 2010
Messages : 159
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 159
Points : 91
Points : 91
Par défaut Importation .csv dans mysql

Bonsoir,

Je réalise actuellement un site Internet dans lequel je dois pouvoir mettre à jours les tables de la BDD à partir de fichier CSV.

J'ai donc naturellement utilisé la fonction LOAD DATA INFILE. Ceci marchait très bien il y a encore 2 semaine. Mais aujourd'hui cela ne fonctionne plus.

Voici mon code:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
$infosfichier = pathinfo($_FILES[$type_choisis[$i]]['name']);
        $extension_upload = $infosfichier['extension'];
        $extensions_autorisees = array('csv');
        if (in_array($extension_upload, $extensions_autorisees))
        {
			move_uploaded_file($_FILES[$type_choisis[$i]]['tmp_name'], '../CSV/'. $type_choisis[$i] .'.csv');
			//mysql_query('TRUNCATE TABLE '. $type_choisis[$i]);
			mysql_query("
			LOAD DATA LOCAL INFILE '../CSV/". $type_choisis[$i] .".csv'
			REPLACE
			INTO TABLE ". strtolower($type_choisis[$i]) ."
			FIELDS 
			TERMINATED BY ';'
			LINES
			TERMINATED BY '\n'
			IGNORE 2 LINES
			") or die(mysql_error());
			$ok=true;
			//header("Location:../admin/index.php?m=tab");
        }
Grâce à un input type=file je demande à l'utilisateur de choisir un fichier CSV. $type_choisis[$i] correspond as la table qui doit être mise à jour.

LE die(mysql_error()) ne me renvoit rien comme si tout c'était bien passé mais lorsque je vais sur phpmyadmin je constate que la table reste désespérément vide!!

Voila je ne comprend pas du tout d'où vient le problème étant donné que ceci marchait très bien il y a peu.

Si vous avez la moindre question n'hésitez pas

En esperant une réponse de quelqu'un.

Chipss,
Chipss est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/09/2011, 10h11   #2
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 029
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 029
Points : 18 327
Points : 18 327
Envoyer un message via MSN à CinePhil
Bonne habitude à prendre : mettre la requête SQL dans une variable et passer cette variable à mysql_query, au lieu de directement lancer la requête en paramètre de l'instruction. Ça te permet de pouvoir débugguer en faisant un echo de la requête avant envoi au serveur :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
$sql = "
			LOAD DATA LOCAL INFILE '../CSV/". $type_choisis[$i] .".csv'
			REPLACE
			INTO TABLE ". strtolower($type_choisis[$i]) ."
			FIELDS 
			TERMINATED BY ';'
			LINES
			TERMINATED BY '\\\n'
			IGNORE 2 LINES
			";
echo "<br />Requête :<br />".$sql;
mysql_query($sql) or die(mysql_error());
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/09/2011, 00h11   #3
Membre régulier
 
Inscription : août 2010
Messages : 159
Détails du profil
Informations forums :
Inscription : août 2010
Messages : 159
Points : 91
Points : 91
Oui c'est ce que je fait de temps en temps mais je me contente de faire un copier coller de la requête

Bref, le écho me renvoie ceci

LOAD DATA LOCAL INFILE '../CSV/Simon.csv' REPLACE INTO TABLE simon FIELDS TERMINATED BY ';' LINES TERMINATED BY ' ' IGNORE 2 LINES

la table 'simon' existe bien! JE suis assez perdu je dois avouer! Existe-t-il une autre req me permettant de faire la même chose? :/

Edit: A bah si le TERMINATED BY '' ne va clairement pas! Hmm j'ai deja une piste c'est bien. Merci

Hmm en faite si l'on regarde ceci : http://dev.mysql.com/doc/refman/5.0/fr/load-data.html, cela semble normal
Chipss est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h45.


 
 
 
 
Partenaires

Hébergement Web