Re: [LA-discussions] PB php mysql |
[ Thread Index |
Date Index
| More linuxarverne.org/discussions Archives
]
- To: discussions@xxxxxxxxxxxxxxxx
- Subject: Re: [LA-discussions] PB php mysql
- From: jean-luc boutin <jeanlucboutin@xxxxxxxxx>
- Date: Sat, 02 Jan 2010 01:06:16 +0100
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from :user-agent:mime-version:to:subject:references:in-reply-to :content-type:content-transfer-encoding; bh=oNyyMnrm+/0EvBy2ir40VDhJxVcDufekK/dNU3fcobM=; b=cDX2JTq6y6kLCYEVgcDkQeisrpyuWyjbDlq57qTzTbh8HbnwXJZoYWzACITWOVo1PJ Jwetj6LedURUfDXxsMi6aR23K9H+yyocQT22yHIvTNFm4mvN1u+9z9DmbqwkqYDuG+da g6uCgAf7jG1vsm00nd/XYWfCv7hrmCfdmiI/o=
- Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:subject:references :in-reply-to:content-type:content-transfer-encoding; b=h39ksyaOEmNIl1G83Zc6+UIsK4J1j2vjoZ5g9HGZ3eWsnjjjkkgMafxedCsEuApX98 b7DC8G99B+DSOLy5TcuEoEkdMYgkQQUBj44xeivjifDpRmHJN9Jgu9KJh+nWEqvcp8Sl F5AKn/3kDdyXmG7/g1fogDH7hJuMWEGr+25Gk=
KewlCat a écrit :
jean-luc boutin wrote:
Bonsoir à tous,
pour bien commencer l'année je vous soumets un petit problème auquel
je suis confronté.
je cherche à importer dans une table les données d'un fichier txt que
je télécharge et dont le caractère séparateur de champs est "\".
Voici le script que j'utilise et qui marche parfaitement lorsque ce
caractère est ";".
<?php
$serveur = mysql_connect("localhost","user","passwd");
if (!$serveur)
{
die('Non connecté : ' . mysql_error());
}
$db = mysql_select_db('competition', $serveur);
if (!$db)
{
die ('Impossible d\'utiliser la base : ' . mysql_error());
}
$sql = "LOAD DATA INFILE \"afifede.txt\" REPLACE INTO TABLE afifede
FIELDS TERMINATED BY ';' IGNORE 1 LINES";
$result = mysql_query($sql);
if (!$result)
{
die ( 'Erreur' .mysql_error());
}
mysql_close();
?>
je n'ai par contre trouvé aucune solution lorsque ce caractère est
l'antislash quoique ma requette fonctionne lorsque je passe par
phpmyadmin.
Je voudrais m'éviter l'étape qui consiste à modifier le caractère
séparateur de champs dans le fichier afifede.txt .
Merci pour votre aide
jean-luc
---
Liste de discussions de LinuxArverne
http://wiki.linuxarverne.org/listes_de_diffusion
Bonsoir Jean-Luc
Ce qu'il aurait été intéressant de voir, c'est le code qui ne
fonctionne pas, histoire qu'on évite de te le re-proposer...
oui bien sûr mais comme j'ai essayé à peu près tout ce qui me semblait
devoir être essayé...
Il me semble que le caractère \ est utilisé comme caractère
d'échappement dans les chaînes de caractères PHP et que par conséquent
il faut le doubler lorsque tu veux en insérer un dans une chaîne :
$sql = "LOAD DATA INFILE \"afifede.txt\" REPLACE INTO TABLE afifede
FIELDS TERMINATED BY '\\' IGNORE 1 LINES";
essayé sans succès ne remplit que le premier champs
de données du genre EST�1�67�0
Par eilleurs il me semble que le séparateur de chaînes en SQL est
l'apostrophe ("single-quote") donc je verrais plutôt :
$sql = "LOAD DATA INFILE 'afifede.txt' REPLACE INTO TABLE afifede
FIELDS TERMINATED BY '\\' IGNORE 1 LINES";
" " ou ' ' en l'occurence ne change rien à l'affaire
Problème : il se peut que la fonction mysql_query fasse également de
l'échappement avec le caractère \ ce qui obligerait à écrire plutôt
ceci :
$sql = "LOAD DATA INFILE 'afifede.txt' REPLACE INTO TABLE afifede
FIELDS TERMINATED BY '\\\\' IGNORE 1 LINES";
me donne le même résultat
... ce qui semble monstrueux mais n'est malheureusement pas inhabituel
dans certains programmes où l'on multiplie les endroits où sont
retraitées les chaînes de caractères.
Voilà, n'étant pas sûr de mon coup j'ai multiplié les possibilités,
mais je crois qu'il y a de bonnes chances pour que l'une d'entre elles
soit la bonne... du moins je l'espère !
en fait si j'utilise la fonction d'importation de phpmyadmin il me faut
indiquer que la caractère séparateur de champs est '\' mais aussi
modifier le caractère spécial qui est par défaut '\' en le remplaçant
par un caractère qui ne se trouve pas utilisé par exemple '<'
ce qui donne quand je lance la requête sql depuis phpmyadmin la chose
suivante:
LOAD DATA INFILE 'afifede.txt' REPLACE INTO TABLE afifede FIELDS
TERMINATED BY '\\' ESCAPED BY '<' IGNORE 1 LINES
le fichier est alors chargé correctement.
toutefois si je lui demande de créer le code source php il me donne ceci:
$sql = "LOAD DATA INFILE \'afifede.txt\' REPLACE INTO TABLE afifede
FIELDS TERMINATED BY \'\\\\\' ESCAPED BY \'<\' IGNORE 1 LINES";
qui ne fonctionne pas du tout depuis mon script. j'ai bien entendu
essayé des variantes mais rien n'y fait.
voilà plus précisément mon problème.
Je profite de ce message pour vous souhaiter plein de bonnes choses
pour 2010, dans tous les domaines !
=^.^=
---
Liste de discussions de LinuxArverne
http://wiki.linuxarverne.org/listes_de_diffusion
---
Liste de discussions de LinuxArverne
http://wiki.linuxarverne.org/listes_de_diffusion