Aide pour importer des données dans une table avec LOAD DATA

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Aide pour importer des données dans une table avec LOAD DATA

Re: Aide pour importer des données dans une table avec LOAD DATA

par FURAX69 » 12 nov. 2009, 08:01

Code : Tout sélectionner

$file = mysql_real_escape_string($file);
Avant la requête a résolu mon problème... Prob d'escape donc mais en amont de la requête, ce qui m'a fait foirer !

Re: Aide pour importer des données dans une table avec LOAD DATA

par FURAX69 » 11 nov. 2009, 20:44

Bon voici mon code complet (qui ne marche toujours pas !), cela vous donnera peut-être plus d'idées ?

Code : Tout sélectionner

<?php include("include/dbconnect.php"); if (isset($_FILES['file'])) { $file = $_FILES['file']['tmp_name']; $handle = fopen($file,'r'); $row = 1; $handle = fopen("$file", "r"); while (($data = fgetcsv($handle, 4096, ";")) !== FALSE) { $num = count($data); echo "<p> $num champs de données trouvés à la ligne $row: <br /></p>\n"; $row++; } echo "Nom du fichier : $file <p>"; $query = "LOAD DATA INFILE '$file' INTO TABLE $table FIELDS TERMINATED BY ';' ENCLOSED BY '' ESCAPED BY '\\' LINES TERMINATED BY '' "; echo "Affichage de la requête pour vérification : <br>"; echo $query; echo "<br><br><br>"; $req = mysql_query($query) or die (mysql_error()); } ?>
Et le résultat d'affichage qu'il génère :

Code : Tout sélectionner

19 champs de données trouvés à la ligne 1: 19 champs de données trouvés à la ligne 2: 19 champs de données trouvés à la ligne 3: 19 champs de données trouvés à la ligne 4: 19 champs de données trouvés à la ligne 5: Nom du fichier : C:\Program Files\EasyPHP5.3.0\tmp\php21.tmp Affichage de la requête pour vérification : LOAD DATA INFILE 'C:\Program Files\EasyPHP5.3.0\tmp\php21.tmp' INTO TABLE tarifs FIELDS TERMINATED BY ';' ENCLOSED BY '' ESCAPED BY '\' LINES TERMINATED BY '' Erreur de syntaxe près de ''\' LINES TERMINATED BY ''' à la ligne 1
Vraiment, je suis sec là... Help !

Re: Aide pour importer des données dans une table avec LOAD DATA

par FURAX69 » 11 nov. 2009, 17:13

Je corrige donc de cette manière ?

Code : Tout sélectionner

$query= "LOAD DATA INFILE '$file' INTO TABLE $table FIELDS TERMINATED BY ';' ENCLOSED BY '\"' ESCAPED BY '\\' LINES STARTING BY '' TERMINATED BY '\\r\\n' ";
Mais cela donne :
Erreur de syntaxe près de '\r\n'' à la ligne 1

et $query prend la valeur :

Code : Tout sélectionner

LOAD DATA INFILE 'C:\Program Files\EasyPHP5.3.0\tmp\php91A.tmp' INTO TABLE tarifs FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\' LINES STARTING BY '' TERMINATED BY '\r\n'

Re: Aide pour importer des données dans une table avec LOAD DATA

par Calimero » 11 nov. 2009, 16:32

Merci pour le test. J'attire ton attention sur la fin de la requête (LINES STARTING BY ...) :

Code : Tout sélectionner

LOAD DATA INFILE 'C:\Program Files\EasyPHP5.3.0\tmp\php8F8.tmp' INTO TABLE tarifs FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\' LINES STARTING BY '' TERMINATED BY ' '
Comme tu peux le voir le \r\n a été interprété (ce qui est normal dans une chaîne encadrée par des doubles quotes (" ") en PHP. Il faudrait donc remplacer par \\r\\n pour que ça arrive comme tu le souhaites au serveur MySQL.

Re: Aide pour importer des données dans une table avec LOAD DATA

par FURAX69 » 11 nov. 2009, 15:09

Avec cette requête :

Code : Tout sélectionner

$query= "LOAD DATA INFILE '$file' INTO TABLE $table FIELDS TERMINATED BY ';' ENCLOSED BY '\"' ESCAPED BY '\\' LINES STARTING BY '' TERMINATED BY '\r\n' ";
Cela donne :

Code : Tout sélectionner

LOAD DATA INFILE 'C:\Program Files\EasyPHP5.3.0\tmp\php8F8.tmp' INTO TABLE tarifs FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\' LINES STARTING BY '' TERMINATED BY ' '
NB : J'ai essayé d'ajouter des "" autour de mes datas à importer (sachant que de toute manière, Excel ne les ajouter pas dans le CSV), mais ça ne change rien !

Re: Aide pour importer des données dans une table avec LOAD DATA

par Calimero » 11 nov. 2009, 14:10

Bonjour,

As-tu tenté d'afficher la requête SQL générée avant son éxécution ?

Par exemple un petit :
echo $query;


Pour voir exactement ce que reçoit ton serveur MySQL. Ainsi tu pourras plus facilement détecter des erreurs dedans :)

Aide pour importer des données dans une table avec LOAD DATA

par FURAX69 » 11 nov. 2009, 12:51

Bonjour à tous,

Je débute (mais avance bien ;) ) et je dois proposer l'importation d'un fichier dans une table SQL par des utilisateurs lambda. Pas question de leur laisser Phpmyadmin donc...
Je cherche donc à utiliser la fonction qui va bien...

Je commence donc par récupérer un fichier CSV issu d'Excel et qui est sous cette forme :

Code : Tout sélectionner

-;XX;Marque test;Produit 1;Connecteur MDR mâle type 1;100;100;pièce;1;100;2.59;600;2.39;1100;2.19;-;-;-;- -;XX;Marque test;Produit 2;Connecteur MDR mâle type 2;100;100;pièce;14;100;1.85;600;1.71;1100;1.57;-;-;-;- -;XX;Marque test;Produit 3;Connecteur MDR mâle type 3;100;100;pièce;14;100;1.96;600;1.81;1100;1.66;-;-;-;- -;XX;Marque test;Produit 4;Connecteur MDR mâle type 4;100;100;pièce;1;100;2.81;600;2.6;1100;2.38;-;-;-;- -;XX;Marque test;Produit 5;Connecteur MDR mâle type 5;100;100;pièce;14;100;5.93;600;5.48;1100;5.02;-;-;-;-
Je propose l'envoi de ce fichier par un petit formulaire :

Code : Tout sélectionner

<form action="ajouter.php" method="post" enctype="multipart/form-data" name="form1"> <p><input type="file" name="file" /></p> <input type="submit" name="Submit" value="Envoyer"> </form>
Jusque là, tout va bien... Ensuite, je dois exploiter ce fichier... C'est là que je coince depuis des heures !!!

Voici ce que j'ai écris :

Code : Tout sélectionner

if (isset($_FILES['file'])) { $file = $_FILES['file']['tmp_name']; // Petite lecture pour vérifier $handle = fopen($file,'r'); $row = 1; $handle = fopen("$file", "r"); while (($data = fgetcsv($handle, 4096, ";")) !== FALSE) { $num = count($data); echo "<p> $num données trouvés à la ligne $row: <br /></p>\n"; $row++; } // Puis on insère les data dans la table $query= "LOAD DATA INFILE '$file' INTO TABLE $table FIELDS TERMINATED BY ';' ENCLOSED BY '\"' ESCAPED BY '\\' LINES STARTING BY '' TERMINATED BY '\r\n' "; $req = mysql_query($query) or die (mysql_error()); } ...
J'obtient systématiquement "Erreur de syntaxe près de ''' à la ligne 2" !!!
Alors que mon fichier s'importe bien via PhpMyAdmin, avec les mêmes paramètres !

HELP...