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 19:41:37 +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=F94UkzZ+U2uJSslba4QDZJA99ONHRbTpeS9N59SK6Y0=; b=pwh3MbVS+fDdQoM0GpwjbQQQAUlI+v1r3WLDK0VWIoPbsMazcTtnSg8VeIZygRdmqp iH8fluoW4N0or1PKvPXqzKyB0l0GsNc/ZDVewqi8oyvlxQtW70/jW1GJWzUU/dzPae4y AoMk6oNPgbx4fQo74NJFlh/6NjGYJSDBmy16I=
- 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=AV/1V2q3MqXzddTwXQXua14csLWddd2aFxJI/X6kZFQFkPaFbQbr3yjkYw/Pz6EeCT +TrKTPjFNCz4+1nP33ZjD1PQk73SvDiRMroTzuIo4TsB+5ZrrS3Sv+KYLyVqo6AAUera CYtSj31tKyBc65xjYS4sUBsLAkKZAATQryv5g=
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