Concaténation de requête SQL avec PDO
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:
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.