LOAD DATA d'un TXT dans ma base

Discussions à propos de MySQL, des autres bases de données existantes, et du langage SQL.

Modérateur : Modérateurs

fredonzenet
Nouveau membre
Messages : 5
Inscription : jeu. 15 mars 2007, 15:37

LOAD DATA d'un TXT dans ma base

Messagepar fredonzenet » jeu. 15 mars 2007, 15:50

Bonjour,

ce que je décris ci-après FONCTIONNE SUR LE NET !!

En local, sous apache, cela ne fontionne pas :

- j'ai un formulaire où l'on choisi un fichier texte par le bouton parcourir
Ce formulaire est bien en <FORM ENCTYPE='multipart/form-data'
et le INPUT du fichier est <input type='file' name='importfile' >
- en validant le formulaire, on passe bien à mon programme qui fait un LOAD DATA comme cela :

$requete="LOAD DATA LOCAL INFILE '" . $importfile . "' INTO TABLE `tabledimportation` FIELDS TERMINATED BY ';' LINES TERMINATED BY '\\r'";
$resultat=mysql_query($requete);


- Je précise que je suis correctement connecté à ma base de donnée, que la table 'tabledimportation' existe bien et qu'avec l'ajout de message, il semblerait que la requete "LOAD DATA..." soit tout bonnement inefficace à l'exécution de mon php...
- Je précise également que si je fais une importation MANUELLE via phpMyadmin, cela fonctionne (j'ai d'ailleurs repris la syntace de la requete réaffichée dans mon prog pour être sûr mais sans résultat)

- je reprécise que cela FONCTIONNE SUR LE NET !!

HELP SVP, je commence à criser !


Cordialement

Fred

fredonzenet
Nouveau membre
Messages : 5
Inscription : jeu. 15 mars 2007, 15:37

Messagepar fredonzenet » ven. 16 mars 2007, 10:47

help !

Avatar de l’utilisateur
remifedora
Membre avancé
Membre avancé
Messages : 94
Inscription : mar. 27 févr. 2007, 14:00
Localisation : Champagne
Contact :

Messagepar remifedora » ven. 16 mars 2007, 19:45

Il y a plein de raisons possibles...

On ne connait pas tes versions (Apache, PHP, MySQL, distributions...).

Est-ce que MySQL est sur la même machine qu'apache ?
Est-ce que MySQL est compilé avec l'option --enable-local-infile ?
Est-ce que l'option register_global est on ?

Pour info register_global = on c'est mal.
On doit, pour les upload, et sur les version récentes utiliser le tableau $_FILES.

Voila, quelques pistes.

A+

P.S. ce qui ne coute pas cher, vérifier le code retour de MySQL :

Code : Tout sélectionner

$resultat=mysql_query($requete);
if (!$resultat) {
   error_log("PROBLEME SQL :");
   error_log($requete);
   error_log(mysql_error();
}
Des RPM LAMP pour Fedora / RHEL / CentOS sur http://rpms.famillecollet.com/

fredonzenet
Nouveau membre
Messages : 5
Inscription : jeu. 15 mars 2007, 15:37

Messagepar fredonzenet » ven. 16 mars 2007, 21:53

Tout est ok pour le reste puisque je n'ai aucun pb avec d'autres requetes !
De plus, j'affiche meme la taille du fichier TXT juste avant la requete LOAD INFILE, et il est bien rempli.

Et en plus, si je fais un LOAD DATA en requete pur dans le phmmyadmin, ca fonctionne !

Par contre, ce que tu dis :

remifedora a écrit :Est-ce que MySQL est compilé avec l'option --enable-local-infile ?


où puis je controler cela voire modifier ???

Avatar de l’utilisateur
remifedora
Membre avancé
Membre avancé
Messages : 94
Inscription : mar. 27 févr. 2007, 14:00
Localisation : Champagne
Contact :

Messagepar remifedora » sam. 17 mars 2007, 7:25

Tout n'est pas OK, puisque cette requete ne marche pas.

Donc mysql_error() doit sans aucun doute retourner une explication.

On a toujours pas d'info sur les versions utilisées et ton système d'exploitation.

Pour le "local infile", tu peux le voir dans phpMyAdmin (Accueil / Afficher les variables du serveur).

A+
Des RPM LAMP pour Fedora / RHEL / CentOS sur http://rpms.famillecollet.com/

fredonzenet
Nouveau membre
Messages : 5
Inscription : jeu. 15 mars 2007, 15:37

Messagepar fredonzenet » sam. 17 mars 2007, 10:03

oups, j'avais pas bien lu ton code permettant de connaitre l'erreur de la requete.

Finalement, selon le message d'erreur, il s'avère que cette
fonction 'LOAD DATA' n'est pas intégré dans la version du Mysql
fourni avec easyphp1.8.
OUF, je comprend mieux maintenant !
SAUF que cette fonction marche bien dans le phpmyadmin... :shock:


Le problème est que j'ai essayé de mettre la version Mysql 5.0 donc plus récente (sous répertoire mysql complètement réinstallé) mais à ce moment la, le serveur Mysql ne démarre plus lorsque je lance easyphp 1.8.

Je ne peux pas installer entièrement easyphp 2.0 beta (contenant cette nouvelle version de mysql) car certains options du php sont manquantes et me sont nécessaires.

Comment puis-je donc mettre à jour le mysql SEUL afin d'avoir cette fonction LOAD DATA incluse ?



Merci en tout cas pour tes messages et ta patience ! :wink:

Evolution
Conseiller
Conseiller
Messages : 3032
Inscription : lun. 05 janv. 2004, 18:56
Localisation : Lyon

Messagepar Evolution » sam. 17 mars 2007, 10:42

des fonctions manquantes dans EasyPHP 2.0b1 ?

euh c'est à dire

Avatar de l’utilisateur
remifedora
Membre avancé
Membre avancé
Messages : 94
Inscription : mar. 27 févr. 2007, 14:00
Localisation : Champagne
Contact :

Messagepar remifedora » sam. 17 mars 2007, 11:30

La commande LOAD DATA INFILE (fichier présent sur le serveur) est toujours présente dans MySQL.

C'est l'option LOCAL (fichier présent sur le client) qui n'est pas toujours disponible.

Puisque dans le cas d'EasyPHP tout est sur la même machine, tu peux essayer sans cette option, cela devrait marcher.

A+

P.S. : dans le cas de phpMyAdmin, l'option "LOCAL" n'est ajoutée qu'en cas de besoin (analyse de la config du serveur)
Des RPM LAMP pour Fedora / RHEL / CentOS sur http://rpms.famillecollet.com/

fredonzenet
Nouveau membre
Messages : 5
Inscription : jeu. 15 mars 2007, 15:37

Messagepar fredonzenet » sam. 17 mars 2007, 12:03

SUPER !

Ca marche sans le LOCAL !

Damned, que de turpitude pour une option !!


En tout cas je te remercie BEAUCOUP pour m'avoir auguillé et donné la solution ! :D

Je te souhaite un bon week-end,

cordialement

Fred


Revenir vers « SQL »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 2 invités