Salut,
j'essaye actuellement de me construire un petit framework basé sur un autre plus gros.
J'ai décidé bien qu'un peu réticent au début à utiliser PDO, surtout pour l'abstraction du SGBD (pas prévu pour le moment de quitter MySQL mais on ne sait jamais, bref autant prévoir à l'avance).
Mais j'ai un petit soucis; en gros j'ai ce que j'apelle des "medias" avec des descriptions (un media peut avoir 40 descriptions (une langue par description quoi)).
J'ai tout un système qui au final me renvoit du XML (info du media, les champs de la description avec les valeurs etc).
Bref au début j'ai fait mes classes avec des méthodes tels que getDescription qui prend l'ID de la description à rechercher.
Jusque là aucun soucis, seulement voilà voulant effectuer quelques conditions supplémentaires car j'en aurais forcément besoin un moment ou l'autre, la requête n'était plus du tout adaptée. La solution (qui est d'ailleurs en gros celle du framework original, enfin c'est un peu plus compliqué puisqu'ils ont "inventé" un langage...) est donc de passer la requete SQL comme paramètre (au quel cas je peux donc faire mes manipulations et obtenir le résultat souhaité).
Ca marche c'est sur, mais c'est pas sécurisé du tout ! (vive les injections).
Tout ça pour en venir au soucis; les requêtes préparées, en fait comme j'ignore ce que contiendra ma requête, je ne peux pas faire mon execute correctement.
Alors je sais que ne suis pas obligé de les utiliser mais vu que ça peut amener plus d'avantages que d'inconvénients, c'est un peu con de les laisser tomber.
Perso je ne vois que 2 solutions possibles mais si vous avez une solution plus convenable je prends:
- Ou bien je fais comme pour les fonctions mysql_, c'est à dire me faire une fonction (méthode ici puisque objet) secureString prenant en paramètre la string à parser, et y appliquer l'option quote de PDO.
- Ou bien passer 2 paramètres: la requête SQL avec les marqueurs, et le tableau à mettre dans l'execute, c'est un paramètre en plus mais le problème serait régler et je pourrais utiliser ces requêtes préparées.
PS: Tant que j'y suis, j'avais l'habitude de faire un htmlspecialchars en même temps que le mysql_real_escape_string, mais vaut il mieux le faire en même temps ou seulement s'en occuper lors de l'affichage puisque le problème ne se pose qu'a l'affichage (faille XSS, pas SQL) (et possible en XSLT ? Le résultat étant du XML geré par du XSL, PHP ne s'occupe pas de l'affichage dans ce framework !)
Bref, j'ai plusieurs "solutions" problème mais j'aimerai trouver une convenable (c'est deja assez "lourd" de devoir faire toutes ces transformations alors si je peux éviter de rajouter une couche inutile).
Merci d'avance en tout cas.