PDA

Voir la version complète : Load data infile


lulu
09/02/2004, 18h23
J'ai ramé tout le we avec un load data infile.
Bonjour,
Ca tombe bien, ce forum, j'ai ramé tout le we avec la commande load data infile (php/MySql)

J'ai 2 problèmes :

1- ma requête marche en local (sous easyphp) mais quand je rajoute l'option
OPTIONALLY ENCLOSED BY ' " ' j'obtiens ce message d'erreur :
Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING in
d:\gites\ajout_fichier.php on line 43
Quelle est mon erreur de syntaxe ??

2- quand je mets en ligne sur mon serveur (60gp_ovh) une requête qui
fonctionne en local, j'obtiens cette erreur :
Message de MySQL : Access denied for user: 'toto@web15.60gp.ha.ovh.net'
(Using password: YES)

un problème de droits ??

Si vous avez une idée, je suis preneur ;-)
merci d'avance
:)

OVH
09/02/2004, 19h24
Nous avons bloqué cette fonction. Vous ne pouvez pas
l'utiliser. Elle pose des problèmes de sécurité d'un côté et
de l'autre côté elle n'est pas exploitable puisque les serveurs
sql ne sont pas physiquement les mêmes que les serveurs
ftp. Donc il n'est pas possible recuperer les informations
du ftp pour l'ajouter dans le sql directement.

Il faut utiliser mysqldump pour recuperer la base en fichier
texte et mysql pour ajouter le fichier texte en sql.

Pharmespace
10/02/2004, 07h57
Tu ajoutes le "OPTIONNALLY[...]" dans une requête d'un script PHP ??
Alors je suppose que la double quote génère un problème de chaine non fermé.
Donc plutôt :
$sql = "INSERT ...... OPTIONALLY ENCLOSED BY '\"' .... ";
(inverses les quote et doubles quotes selon la syntaxe que tu utilises, mais dans tous les cas, il faut échapper le caractère séparateur).

Sinon pour le LOAD depuis ton serveur OVH, tu dois ajouter LOCAL :
LOAD DATA LOCAL INFILE et le fichier dump de ta base doit être déjà sur le serveur (via un POST de formulaire -attention 2Mo maxi- ou via FTP).

En espérant que ça t'aide.

lulu
10/02/2004, 10h13
J'ai essayé '\" ', ' \\" ', ' " ', etc... sans succés :confused:

Pharmespace
10/02/2004, 11h26
Tu peux copier/coller la portion de script en question ?

lulu
10/02/2004, 13h04
$ajout=ExecRequete ("LOAD DATA INFILE '$fiche' INTO TABLE nastasia FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY ' " ' LINES TERMINATED BY '\r\n' (reference,designation,prix,fin_vie) ", $connexion);


voili...
pas sorcier, pourtant !!

PjD
10/02/2004, 16h22
J'ai rencontré le même problème
et comme la commande est bloquée par OVH pour de problèmes de sécurité,

J'ai utilisé la classe HTTP_Upload pour y parvenir
A+
Patrick

Pharmespace
10/02/2004, 16h41
$ajout=ExecRequete ("LOAD DATA INFILE '$fiche' INTO TABLE nastasia FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\r\n' (reference,designation,prix,fin_vie) ", $connexion);

Il faut donc modifier '"' par '\"' sinon évidemment la chaine SQL est tronquée.
Et il faut rajouter LOCAL entre DATA INFILE, cause sécurité.

(le fichier source $fiche doit être envoyé sur le serveur avant, ou uploadé via un formulaire et en utilisant $_FILES["tmp_name"] qui est le chemin du fichier dans le temp du serveur).

Moi c'est nickel comme ça.

lulu
10/02/2004, 17h58
Pharmespace écrivait :
Il faut donc modifier '"' par '\"' sinon évidemment la chaine SQL est tronquée.
Et il faut rajouter LOCAL entre DATA INFILE, cause sécurité.[/B]

déjà essayé...sans succès...
par contre, je vais essayé le fichier sur le serveur...

merci

lulu

Pharmespace
10/02/2004, 18h42
Mon tip concernant l'upload du fichier source via un formulaire ne concerne pas du tout l'erreur que tu obtiens...
Parse error: parse error, unexpected T_CONSTANT_ENCAPSED_STRING
C'est vraiment un bête erreur de chaine ça : quand tu mets le \, tu as quoi comme problème/erreur ?

lulu
11/02/2004, 00h00
quand je mets OPTIONALLY ENCLOSED BY ' \" ' j'obtiens cette erreur :
'Erreur dans l'exécution de la requête 'LOAD DATA INFILE '$fiche' INTO TABLE nastasia FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY ' " ' LINES TERMINATED BY ' ' (reference,designation,prix,fin_vie) '.
Message de MySQL : Field separator argument is not what is expected. Check the manual

si j'enlève OPTIONALLY ENCLOSED BY ' " ' , la requête fonctionne bien, mais j'ai des " dans certains champs...

Pour le test sur le serveur, c'était pour mon 2ème pb...

à suivre :)

Pharmespace
11/02/2004, 08h37
Bon. :D
Hum.

Pour le pb 2, quand tu fais le LOAD depuis le serveur en ligne, TU DOIS RAJOUTER LOCAL entre DATA et INFILE.
Et ton fichier doit être sur le serveur ou uploadé avant (vague impression de me répéter moi...)

Pour l'autre pb je t'ai dit : '\"' et pas ' \" ' ce qui totalement différent.
Doc mySQL :
If not empty, the FIELDS [OPTIONALLY] ENCLOSED BY and FIELDS ESCAPED BY values must be a single character

Courage.

lulu
11/02/2004, 10h53
Pharmespace écrivait :
Et ton fichier doit être sur le serveur ou uploadé avant (vague impression de me répéter moi...)

Pour l'autre pb je t'ai dit : '\"' et pas ' \" ' ce qui totalement différent.
Doc mySQL :
Courage.

'\"' et pas ' \" ' totalement différent : là, merci, tu m'as appris qq chose :) Je l'avais écrit comme ça pour des raisons de lisibilité... En effet, ça fonctionne en retirant les spaces...

Pour l'autre pb, désolé si je te fais répéter, mais j'ai bien compris, mais pas eu le temps de tester....

sinon, autre question, sans vouloir abuser,
dans l'expression : FIELDS TERMINATED BY ';' , si mes champs sont séparés par une tabulation (dans un fichier .txt, par ex) comment écrit-on le by ' ' ?

en tout cas, grand merci, je progresse grâce à toi

;)

lulu

Pharmespace
11/02/2004, 12h33
FIELDS TERMINATED BY '\t'

Comment je sais ça ? ben www.mysql.com à chaque fois ; et au passage, j'apprends...

Conseil = RTFM http://www.mysql.com/doc/fr/LOAD_DATA.html

On y arrive...

lulu
11/02/2004, 13h19
Eh bien grand merci à toi.....
tout fonctionne....
je mets les url dans mes favoris :)