Bonjour à tous,

Je développe un module de recherche sur mon site, et le problème se pose lors de la génération de la requête SQL (j'utilise PDO). J'ai plein de champs différents (et de tables différentes aussi), donc j'ajoute des portions de requête en fonction du fait que la variable de recherche soit vide ou non, ou en fonction de sa valeur.

Voici un exemple de code:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
 
if($couleur == 1){
            $orCoul = "OR couleur_chaussure = :coul_chaussure";
        }else{
            $orCoul = "";
        }
        if($couleur == 2){
            $andCoul = "AND couleur_haut = :coul_haut";
        }else{
            $andCoul = "";
        }
        if($couleur == 3){
            $orCoul2 = "OR couleur_bas = :coul_bas";
        }else{
            $orCoul2 = "";
        }
        $requete = $this->getDb()->prepare("
                SELECT id_utilisateur, id_societe, prenom, nom, societe, ville, pays
                FROM utilisateurs, couleur
                WHERE //liaison...
                AND (id_utilisateur = :id_utilisateur OR id_utilisateur = :id_utilisateur2)
                AND (id_teinte_globale = :teinte $orCoul $orCoul2)
                $andCoul
        ");
        $requete->bindValue(':id_produit', "157", PDO::PARAM_INT);
        $requete->bindValue(':id_produit2', "149", PDO::PARAM_INT);
        $requete->bindValue(':id_teinte_globale', "2", PDO::PARAM_INT);
        if($couleur == 1){
            $requete->bindValue(':couleur_chaussure', $couleur_chaussure, PDO::PARAM_STR);
        }
        if($couleur == 2){
            $requete->bindValue(':couleur_haut', $couleur_haut, PDO::PARAM_STR);
        }
        if($couleur == 3){
            $requete->bindValue(':couleur_bas', $couleur_bas, PDO::PARAM_STR);
        }
        if($requete->execute(array(":pays" => "fr"))) { return $requete->fetchAll(PDO::FETCH_ASSOC);} else {return false;}
Sauf que ce genre de méthode quand on a des dizaines de champs de recherche devient très compliquée avec PDO. Notamment pour attribuer les bonnes valeurs aux bindValues.
Auriez-vous une méthode plus simple?
J'ai pris connaissance de PDO::quote, mais c'est sans plus au niveau de la sécurité apparemment.

Merci d'avance de votre aide.