Re: [LA-discussions] PB php mysql

[ Thread Index | Date Index | More linuxarverne.org/discussions Archives ]


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


Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/