Oui c'est sécurisé.
Comment construire ta requête?
Cela va dépendre de ton nombre de données, en effet un premier filtre peut filtrer assez de données pour se permettre de toutes les garder pour appliquer un second filtre traité par PHP.
Autrement, si les variables POST sont définies (et tant qu'à faire non vides puisqu'on ne va pas filtrer sur un critère qui n'élimine aucune donnée) tu va passer par une variable texte :
$reqprep = "SELECT id FROM table WHERE";
$reqaexec = array();
$verif = 0;
if (isset($_POST['couleur']) && !empty($_POST['couleur'])) {
|| $reqprep .= " couleur = ?";
|| $verif += 1;
}
if (isset($_POST['taille']) && !empty($_POST['taille'])) {
|| $reqprep .= " taille > ?";
|| $verif += 1;
}
etc.
if ($verif == count($_POST)) {
|| $req=$bdd->prepare($reqprep);
|| $req->execute($_POST);
|| $res=$req->fetch();
}
Tu vois l'idée, bon je n'ai pas vérifié si ça fonctionne, par contre il va falloir faire très attention à l'ordre à l'intérieur du tableau $_POST puisque tu en seras très dépendant.