CSV et MySQL ...

CSV et MySQL ... - PHP - Programmation

Marsh Posté le 12-12-2003 à 15:28:49    

tous les jours une question... aujourd'hui ça concerne l'importation de CSV dans une table MySQL...
 
quand je fais :
 
LOAD DATA LOCAL INFILE "D:/DATA/coursiers.csv" INTO TABLE coursiers;
 
Il me retourne :
 

Code :
  1. requête SQL : 
  2. LOAD DATA LOCAL INFILE "D:/DATA/coursiers.csv" INTO TABLE coursiers;
  3. MySQL a répondu:
  4. Load data disabled


 
... wot happened !!!
 
thx
 
Freed

Reply

Marsh Posté le 12-12-2003 à 15:28:49   

Reply

Marsh Posté le 12-12-2003 à 16:23:10    

regarde du coté de la traduction de disabled ... :o


Message édité par anapajari le 12-12-2003 à 16:23:33
Reply

Marsh Posté le 12-12-2003 à 16:24:15    

bah ça veut dire "desactivé"... mais why ????

Reply

Marsh Posté le 12-12-2003 à 17:01:06    

parce que ton build de MySQL ne supporte pas cette fonction?


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 12-12-2003 à 17:03:32    

Arf !! si c le cas... c'est le bad total !! j'ai pas envie de me taper toute la table à la main !!! Grrr !!! j'utilise PHPMYADMIN 2.2.42 ... donnée d'office par Online.net

Reply

Marsh Posté le 12-12-2003 à 17:14:17    

Code :
  1. LOAD DATA LOCAL INFILE '/tmp/phpYbXcQ2' INTO TABLE `test` FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n'


 
Marche très bien chez Online ! ! !
Je viens de faire çà avec phpPyAdmin ! ! !
 
Contenu du fichier csv :  

"1";NULL
"2";NULL
"4";NULL
"5";NULL
"25";"12345.1234"
"26";"99999.9999"


 
Format de la table :

CREATE TABLE test (
  x tinyint(4) NOT NULL default '0',
  prix decimal(8,4) default NULL
) TYPE=MyISAM;


Message édité par Mara's dad le 12-12-2003 à 17:15:43

---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 12-12-2003 à 19:28:14    

je viens de refaire exactement tes requetes (j'ai créé la même table que toi, j'ai fait un txt avec tes données... ya juste le chemin qui est different... et j'ai la même reponse :
 
 

Code :
  1. Erreur
  2. requête SQL : 
  3. LOAD DATA LOCAL INFILE 'D:\\DATA\\test.txt' INTO TABLE `test` FIELDS TERMINATED BY ';' ENCLOSED BY '"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n'
  4. MySQL a répondu:
  5. Load data disabled
  6. Retour

Reply

Marsh Posté le 12-12-2003 à 19:44:53    

Envoie un mail à online :/
T'aurras peut-être une réponse dans 1 semaine...
Sinon, tu te fais un script PHP qui importe les données.


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 15-12-2003 à 12:23:14    

Mara's dad a écrit :

...
Sinon, tu te fais un script PHP qui importe les données.


 
Un truc dans ce style peut etre :
 

Code :
  1. <?php
  2. $csvfile = 'd:\Temp\csv.csv';
  3. $sqlfile = 'd:\Temp\sql.sql';
  4. $table = 'my_table';
  5. $lines = file($csvfile);
  6. $handle = fopen($sqlfile, 'w');
  7. foreach ($lines as $line)
  8. {
  9.     $line = preg_replace('/;/', ',', trim($line));
  10.     $query = "INSERT INTO `$table` VALUES ($line);\n";
  11.     fwrite($handle, $query);
  12. }
  13. fclose($handle);   
  14. ?>


 
EDIT : et apres tu importes les données du dump => mysql -umyuser -p < sql.sql.


Message édité par impulse le 15-12-2003 à 12:24:58
Reply

Marsh Posté le 15-12-2003 à 19:27:51    

je ne comprends pas trop ça : mysql -umyuser -p
 
j'ai essayé ta technique mais j'ai toujours rien dans ma base... pas de message d'erreur cependant!

Reply

Marsh Posté le 15-12-2003 à 19:27:51   

Reply

Marsh Posté le 15-12-2003 à 20:29:20    

impulse a écrit :

EDIT : et apres tu importes les données du dump => mysql -umyuser -p < sql.sql.


Il est chez online !
Il n'as pas accès à la console.
 
Celà si il sait executer une requête MySql en PHP, y'a pas grand chose à changer dans ton script pour importer les données :D


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
Reply

Marsh Posté le 16-12-2003 à 09:15:54    

freed102 a écrit :

je ne comprends pas trop ça : mysql -umyuser -p
 
j'ai essayé ta technique mais j'ai toujours rien dans ma base... pas de message d'erreur cependant!


 
Ah. Ben au lieu d'ecrire chaque INSERT dans le fichier dump tu executes la requete directement avec mysql_query(). Ou sinon tu peux aussi utliser PHPMyAdmin, si il est dispo, pour importer le dump.

Reply

Marsh Posté le 16-12-2003 à 11:40:20    

oui j'utilise PHPMyAdmin ... Mais je sais pas comment on utilise ta syntaxe... (sorry je debute grave en MySQL)

Reply

Marsh Posté le 16-12-2003 à 12:00:08    

1. tu as essayé d'importer ton csv avec PHPMyAdmin? Il y a 2 options pour charger les données (DATA ou DATA LOCAL). DATA LOCAL n'a pas l'air de fonctionner chez toi mais peut etre que DATA pourrait fonctionner. Pour tester avec PHPMyAdmin tu choisis la bd puis tu cliques sur la table et tu as une option "insert data from a textfile into table" tout en bas de la page.
 
2. si ça ne marche pas tu peux utiliser PHPMyAdmin pour executer les requetes que tu as créées et qui sont dans le fichier dump (sql.sql dans mon exemple). Il doit y avoir une option pour charger un dump et l'executer, regarde dans la doc de PHPMyAdmin.  

Reply

Marsh Posté le 16-12-2003 à 12:12:14    

j'ai essayé un copier coller de slq.sql directement dans PHPMyAdmin... Mais ça ne marchait pas..
j'ai donc changé un peu ta formule magique :

Code :
  1. foreach ($lines as $line)
  2. {
  3.     $line = preg_replace("/;/", "','", trim($line));
  4.     $query = "INSERT INTO `$table` VALUES ('$line');\n";
  5.     fwrite($handle, $query);
  6. }


 
(j'ai rajouté des quotes)... maintenant ça marche ... mais au bout d'un moment j'ai une erreur...  

Code :
  1. [...]
  2. INSERT INTO `coursiers` VALUES ('Les Muraux','78130','25');
  3. INSERT INTO `coursiers` VALUES ('L'Etang la ville','78620','17')
  4. MySQL a répondu:
  5. You have an error in your SQL syntax near 'Arcy','78390','15');
  6. INSERT INTO `coursiers` VALUES ('Bougival','78380','9');
  7. ' at line 1


 
ya un conflit dans la syntaxe... je vais chercher ce que c !

Reply

Marsh Posté le 16-12-2003 à 12:14:48    

c donc un conflit avec les apostrophes... comment eviter cela... ???

Reply

Marsh Posté le 16-12-2003 à 12:23:55    

Et voila !!
 
j'ai rechangé ta formule magique en :
 

Code :
  1. foreach ($lines as $line)
  2. {
  3.     $line = preg_replace('/;/', '","', trim($line));
  4. $line = '"'.$line.'"';
  5.     $query = "INSERT INTO `$table` VALUES ($line);\n";
  6.     fwrite($handle, $query);
  7. }


 
Tout à fonctionné !
 
Thanx !!!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed