BindParam avec WHERE ? = ?

Résolu/Fermé
kitsuo Messages postés 24 Date d'inscription dimanche 8 janvier 2012 Statut Membre Dernière intervention 13 mars 2017 - Modifié par kitsuo le 3/06/2014 à 13:46
kitsuo Messages postés 24 Date d'inscription dimanche 8 janvier 2012 Statut Membre Dernière intervention 13 mars 2017 - 3 juin 2014 à 14:11
Bonjour tout le monde,

J'ai une requete que je dois répeter plusieurs fois pour besoin d'un formulaire de recherche avec pas mal d'options et je voulais faire une seule requete sql et l'adapter par rapport aux options que l'utilisateur choisit (région, département, ville, hopital, service) :

$req = $bdd->prepare("SELECT DISTINCT nom_antidote, lot, date_peremption, date_inventaire, nom_ville, nom_hopital, tel_hopital
                                FROM stocks AS st
                                JOIN antidotes AS an ON st.id_antidote = an.id_antidote
                                JOIN hopitaux AS ho ON st.id_hopital = ho.id_hopital
                                JOIN services AS se ON st.id_service = se.id_service
                                JOIN villes AS vi ON ho.id_ville_hopital = vi.id_ville
                                JOIN departements AS de ON vi.departement_ville = de.id_dep
                                JOIN regions AS re ON de.id_region_dep = re.id_region
                                JOIN hopitaux_has_services AS hhs ON ho.id_hopital = hhs.hopitaux_id_hopital AND se.id_service = hhs.services_id_service
                                WHERE ? = ?
                                ORDER BY st.date_peremption;");
        $req->bindParam(1, $opt1, PDO::PARAM_STR);
        $req->bindParam(2, $opt2, PDO::PARAM_STR)

        $opt1= 'ho.id_hopital';
        $opt2 = $_SESSION['id_hopital_user'] ;
$req->execute();


ça par exemple c'est pour qu'il resorte le stock de l'hopital auquel appartient l'utilisateur

Dans les WHERE, les deux '?' sont remplacés par ho.id_hopital et l'id de l'hopital, ce qui est censé donner WHERE ho.id_hopital = 1 par ex, et donc la requête passe.

Sauf que j'ai l'impression que le premier '?' qui est égal à ho.id_hopital, est inserré dans la requête avec des guillemets donc ça fait WHERE "ho.id_hopital" = 1, donc la requête ne passe pas :/.

Est-ce que vous auriez une idée de comment régler le souci svp ?

PS : pour mieux comprendre le code : si on choisit de faire une recherche par région, $opt1 sera égal à re.id_region et $opt2 sera égal à $_POST['region'], etc...

--

1 réponse

kitsuo Messages postés 24 Date d'inscription dimanche 8 janvier 2012 Statut Membre Dernière intervention 13 mars 2017
3 juin 2014 à 14:11
Trouvé u_u..!
Enfait j'avais pas besoin d'utiliser bindParam, les variables suffisent pour ce que je veux faire.

Je partage au cas où il y aurait d'autres qui rencontrent ce problème :).


$test = $_SESSION['id_hopital_user'];
        $opt2 = 'ho.id_hopital';
        $opt1 = $test;
        $opt3 = '""';
        $opt4 = '""';
        echo $opt1 . " " . $opt2 . " " . $opt3 . " " . $opt4;

        $req = $bdd->prepare("SELECT DISTINCT nom_antidote, lot, date_peremption, date_inventaire, nom_ville, nom_hopital, tel_hopital
                                FROM stocks AS st
                                JOIN antidotes AS an ON st.id_antidote = an.id_antidote
                                JOIN hopitaux AS ho ON st.id_hopital = ho.id_hopital
                                JOIN services AS se ON st.id_service = se.id_service
                                JOIN villes AS vi ON ho.id_ville_hopital = vi.id_ville
                                JOIN departements AS de ON vi.departement_ville = de.id_dep
                                JOIN regions AS re ON de.id_region_dep = re.id_region
                                JOIN hopitaux_has_services AS hhs ON ho.id_hopital = hhs.hopitaux_id_hopital AND se.id_service = hhs.services_id_service
                                WHERE " . $opt2 ." = ". $opt1 . " AND ". $opt3 ." = ". $opt4 ."
                                ORDER BY st.date_peremption;");
0