Rechercher : dans
Par :

[PHP - SQL] Load data infile

Dernière réponse le 30 mai 2009 à 23:12:33 dodou, le 19 jun 2007 à 14:39:58 
 Signaler ce message aux modérateurs

Bonjour à vous
J'ai un pb avec la fonction load data infile :(
voila, j'ai un fichier texte sur mon serveur (/file/texte.txt), avec des @ en tant que séparateurs, et je voudrais l'utiliser pour inserer le tout dans ma base de donnée (table : test);
La fonction que j'utilise (et qui ne marche pas donc) :
$query= "LOAD DATA INFILE '/file/texte.txt' INTO TABLE `test` FIELDS TERMINATED BY '@' ENCLOSED BY '\"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n' ";
J'ai également essayé en ajoutant LOCAL après DATA, mais ca ne marche pas non plus.

Aucune erreure ne m'est signalé mais ma table ne se remplie pas :(

Merci beaucoup de m'accorder de votre temps pour m'aider :D

Configuration: Windows Vista
Opera 9.21

1

Ohm-WorK, le 19 jun 2007 à 14:51:42

Salut

Donc, si j'ai suivi tu fais :
$query= "LOAD DATA INFILE '/file/texte.txt' INTO TABLE `test` FIELDS TERMINATED BY '@' ENCLOSED BY '\"' ESCAPED BY '\\' LINES TERMINATED BY '\r\n' ";
et ensuite tu dois surement faire un :
$req = mysql_query($query) or die (mysql_error());

Et tu n'obtient aucune erreur ?

Tchusss La vie est une maladie mortelle, sexuellement transmissible (Woody Allen)

Répondre à Ohm-WorK

2

dodou, le 19 jun 2007 à 15:02:09

Salut Ohm-WorK, merci de m'aider.

J'avais oublié de mettre or die(mysql_error()), c'est pour ca que je voyais pas les erreurs.

Alors, quand je fais la requete LOAD DATA LOCAL INFILE j'ai cette erreur :
The used command is not allowed with this MySQL version

Et quand je fais LOAD DATA INFILE j'ai cette erreure :
Access denied for user: 'xxxxxx@localhost' (Using password: YES)

Moi ca ne m'avance pas plus vu que je sais pas ce que ca veut dire, mais peut etre que ca va t'aider a cibler le probleme.

Merci @ tte

Répondre à dodou

3

Ohm-WorK, le 20 jun 2007 à 14:41:08

Salut,

Alors

1) The used command is not allowed with this MySQL version : Commande non autorisé dans ta version de Mysql

2) Access denied for user: 'xxxxxx@localhost' (Using password: YES) : Problème d'authentification lors de l'accès à la base de données.

Ca devrait t'aiguiller :)

Tchuss

Ohm-WorK La vie est une maladie mortelle, sexuellement transmissible ­(Woody Allen)

Répondre à Ohm-WorK

4

dodou, le 20 jun 2007 à 14:56:52

Lut Ohm-Work

Oki merci;

Mais maintenant la question est : " comment palier a ce probleme ?" lol;

Comment activer cette option (LOAD DATA LOCAL INFILE) dans mon MySQL ???;

Ce n'est pas un pb d'acces a la base (je me connect bien a la base avec acces ALL Privileges, et j'arrive a recuperer toutes les infos de mes tables);

Merci encore @ toi !

Répondre à dodou

5

Ohm-WorK, le 20 jun 2007 à 15:11:00

Re

tu utilise quelle version de mysql ?

Tchusss La vie est une maladie mortelle, sexuellement transmissible ­(Woody Allen)

Répondre à Ohm-WorK

6

dodou, le 20 jun 2007 à 15:34:17

Je ne sais pas qu'elle est la version, mais apparemment ca a l'air d'etre une des dernieres qui integre la suppression de cette fonctionnalité (par securité).
Mais mon serveur est sur OVH, donc mutualisé. Je sais pas si je peux modifier les options et si oui comment...

J'ai entendu parler de --enable-local-infile, mais où il se trouve et comment y acceder !?!?
Etant sur un serveur mutualisé je sais meme pas si possible.

As tu une idée de comment je pourrai faire pour que ca marche ?

Encore merci pour tes reponses !

Répondre à dodou

7

Ohm-WorK, le 20 jun 2007 à 15:40:00

Salut

Si tu es sur du mutualisé, tu n'aura pas accès aux options de démarrage du serveur, désolé !

Tchuss La vie est une maladie mortelle, sexuellement transmissible ­(Woody Allen)

Répondre à Ohm-WorK

8

dodou, le 20 jun 2007 à 15:58:48

RE
Je viens de demander a mon bosse, et en faite c'est un serveur dedié.
On a acces au configuration de mysql.
Mais j'ai cherché partout mais rien trouvé correspondant LOAD DATA LOCAL INFILE.

Est ce que tu sais comment redemarrer mysql en activant l'option (--enable-local-infile)
ou est ce que je dois aller et qu'est ce que je dois taper ... ?

Merci

Répondre à dodou

9

ferrat, le 11 sep 2007 à 15:24:55

Bonjour
j'ai exactement le meme probleme avec "LOAD DATA INFILE" et comme il y a plus de 2 mois que ces messages ont été postés, je pense qu'un aurait trouvé une solution, bref
si vous avez une idée je vous attends.
merci d'avance.

Répondre à ferrat

10

dodou, le 11 sep 2007 à 16:13:33
  • +1

$alut Ferrat

Je n'ai malheureusement pas trouvé comment faire pour activer cette option.
Du coup j'ai laché l'affaire et me suis rabattu sur une autre voix

Je fais une lecture du fichier en PHP et je crée une requete d'insertion en BD ( en bouclant tant qu'il y a des lignes dans le fichier )

//Le chemin d'acces a ton fichier sur le serveur
$fichier = fopen("textes/ton_texte.txt", "r"); 

//tant qu'on est pas a la fin du fichier :
while (!feof($fichier)) 
{ 
// On recupere toute la ligne
$uneLigne = fgets($fichier, 1024);
//On met dans un tableau les differentes valeurs trouvés (ici séparées par un '@') 
$tableauValeurs = explode('@', $uneLigne); 
// On  crée la requete pour inserer les donner (ici il y a 7 champs donc de [0] a [6])
$sql="INSERT INTO la_table VALUES ('".$tableauValeurs[0]."', '".$tableauValeurs[1]."', '".$tableauValeurs[2]."', '".$tableauValeurs[3]."', '".$tableauValeurs[4]."', '".$tableauValeurs[5]."', '".$tableauValeurs[6]."')"; 
$req=mysql_query($sql); 
// la ligne est finie donc on passe a la ligne suivante (boucle)
}


Voila c'est tout simple mais peut-être que ca t'aidera ou t'orientera

@ ++

Répondre à dodou

15

 Randy, le 30 mai 2009 à 23:12:33

Merci Dodou!

Ton script est tout simplement (c'est le cas de le dire) Génial!
moi, ça me sauve la vie depuis que certains serveurs (Free pour ne pas le citer) ont décidé de bloquer le script LOAD DATA LOCAL INFILE
J'ai un programme qui gère des Etablissements scolaires et qui ont besoin de mettre leurs listes d'élèves à jour régulièrement. ils le font en envoyant un fichier .csv ; là c'était la panique tout d'un coup et ton script m'a permis de pallier au problème, ouf, merci :)
Encore Bravo, c'est brillant :)

Répondre à Randy

11

tbaillon, le 9 oct 2007 à 13:26:02

Bonjour,

J'ai eu exactement le même problème que vous.

Ce genre de problème viens du fait que les autorisations que l'on donne aux utilisateurs lorsque l'on les créée avec des GRANT.

Le problème est résolu depuis hier soir pour moi.

Mon objectif était de créer un utilisateur ayant tous les droits sur son schéma de base, mais pas de droits particuliers sur le reste.

Voici donc ce que j'ai fait:

-- ------------------------------------------------------------­------------------------------------------------------------­---
-- Suppression de l'utilisateur s'il existe pour localhost
drop user 'USER_LOGIN'@'localhost';

-- Suppression de l'utilisateur s'il existe pour % (Tous les autres hosts)
drop user 'USER_LOGIN';

-- Donne les droits pour accéder à minima sur les schéma standard.
GRANT USAGE, SELECT ON *.* TO 'USER_LOGIN'@'localhost' IDENTIFIED BY 'USER_PASSWORD';

-- Donne tous les droits pour accéder au schéma de l'utilisateur, en localhost avec possibilité de faire des GRANT
-- comme par exemple pour créer des utilisateurs read-only (SELECT only par exemple)

GRANT ALL PRIVILEGES ON USER_SCHEMA.* TO 'USER_LOGIN'@'localhost' IDENTIFIED BY 'USER_PASSWORD' WITH GRANT OPTION;

-- Donne tous les droits pour accéder au schéma de l'utilisateur, depuis tout autre serveur SANS possibilité de faire des GRANT
GRANT ALL PRIVILEGES ON USER_SCHEMA.* TO 'USER_LOGIN'@'%' IDENTIFIED BY 'USER_PASSWORD';

-- Donne les droits pour utiliser les LOAD DATE INFILE.
GRANT FILE ON *.* TO 'USER_LOGIN'@'localhost';

-- Recharge les droits.
FLUSH PRIVILEGES;

-- ------------------------------------------------------------­------------------------------------------------------------­---

J'utilise ce modèle SQL pour créer les utilisateurs avec un script BASH/SH/CSH pour faire des remplacements des variables:
USER_SCHEMA, USER_LOGIN et USER_PASSWORD
par des valeurs données en argument.

Voilà.

J'espère que cela vous aidera.

Cordialement,
Thierry

Répondre à tbaillon

12

Rusbel, le 9 jan 2008 à 14:56:40

Hola me gustaria un ejemplo mas completo .. de que manera tiene que estar estructurado el txt.. y como puedo hacer una rutina ...

mi problema es lo siguiente :

desde cliper .. me genera un archivo plano.. ose un txt por cada registro.. lo que se desea es leer ese txt y pasarlo a mi base de datos mysql ... agradecere su ayuda:

explico a medida que se van generando los txt mi php tiene que leer el txt y automaticamente insertarlo en mi tabal de mi bd mysql .. quiero algo asi como una rutina .. gente .. es urgente .. agradecere su ayuda

Répondre à Rusbel

13

bloap, le 1 fév 2008 à 18:46:06
  • +2

Remplacer LOAD DATA LOCAL INFILE par LOAD DATA INFILE peut aider

Répondre à bloap

14

bloap, le 1 fév 2008 à 18:47:21
  • +2

Remplacer LOAD DATA LOCAL INFILE per LOAD DATA INFILE

Répondre à bloap