Re: [LA-discussions] PB php mysql

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


Romain Tartière a écrit :
Salut

On Sat, Jan 02, 2010 at 12:21:16AM +0100, KewlCat wrote:
 jean-luc boutin wrote:
$sql = "LOAD DATA INFILE \"afifede.txt\" REPLACE INTO TABLE afifede FIELDS TERMINATED BY ';' IGNORE 1 LINES";

C'est du SQL2010 ça au moins...  Pour du code pérenne, à éviter comme la
peste; si c'est pas fait pour être réutilisé (c'est que de la glue) quel
intérêt de le faire dans un script en PHP ?
L'intérêt c'est que je cherche à faire une application de gestion des compétitions de lutte qui pourra être utilisée par des personnes dont je suppose

1) qu'elles utilisent des ordi tournant sous windows
2) qu'elles ne connaissent à peu près rien en informatique et qu'il leur suffira de cliquer sur quelques boutons et de remplir quelques formulaires
pour gérer leurs compétitions.
3) que cette gestion se fera en local.

c'est pourquoi j'ai pensé au php et à mysql. Il doit être assez facile de créer un executable qui installe une solution wamp qu'il n'y a plus qu'à utiliser. (et peut-être une intégration à un joomla minimal) Je suis bien évidemment preneur de toute autre solution libre et indépendante de l'os. La seule chose qui existe pour l'instant est un ensemble de fichier excel avec quelques macros.

Existe-t-il une solution equivalente à wamp qui utiliserait par exemple postgres?

Exception autorisée, c'est quelque chose qui est exécuté souvent dans un
site web (genre à chaque page affichée) et il faut que ça ne rame pas
trop et on est obligé de garder MySQL.

Par eilleurs il me semble que le séparateur de chaînes en SQL est l'apostrophe ("single-quote") donc je verrais plutôt :
Oui, mais su la syntaxe de MySQL était le SQL, ça se saurait ...

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";

Non, la fonction exécute à peu près les requêtes qu'on lui passe (juste
des fois on ne lui passe pas ce qu'on pense à cause des magic quotes
(qui pour une raison obscure étaient activées par défaut du temps ou je
faisais du PHP) qui se retrouve un peu trop échappées dès qu'on code
correctement en faisant appel à *_escape_string() (et
mysql_real_escape_string())).

Après, tu voulais peut être dire que MySQL lui même interprétait '\'
comme spécial: c'est le cas, mais c'est un problème indépendant.


Bref, si tu prends la doc-pourrie (qui ne dit nulle par de quel standard
LOAD DATA sort):
http://dev.mysql.com/doc/refman/5.0/fr/load-data.html

LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name.txt'
    [REPLACE | IGNORE]
    INTO TABLE tbl_name
    [FIELDS
        [TERMINATED BY '\t']
        [[OPTIONALLY] ENCLOSED BY '']
        [ESCAPED BY '\\' ]
    ]
[LINES [STARTING BY ''] [TERMINATED BY '\n']
    ]
    [IGNORE number LINES]
    [(col_name,...)]

C'est probablement le "ESCAPED BY '\\'" qui vient t'enquiquiner.  Essaye
de le changer.

on vient de me donner la solution sur developpez.com

il faut echapper 2 fois 1 fois pour php et 1 fois pour mysql, ça donne:


$sql = "LOAD DATA INFILE 'afifede.txt' REPLACE INTO TABLE afifede FIELDS TERMINATED BY '\\\\' ESCAPED BY '<' IGNORE 1 LINES";

ce que kewlcat avait vu mais qui ne marche que si je substitue à l'antislash un autre caractère.



++
Romain


@+

jean-luc

---
Liste de discussions de LinuxArverne
http://wiki.linuxarverne.org/listes_de_diffusion


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