BindParam avec WHERE ? = ?
Résolu
kitsuo
Messages postés
24
Date d'inscription
Statut
Membre
Dernière intervention
-
kitsuo Messages postés 24 Date d'inscription Statut Membre Dernière intervention -
kitsuo Messages postés 24 Date d'inscription Statut Membre Dernière intervention -
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) :
ç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...
--
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...
--
A voir également:
- BindParam avec WHERE ? = ?
- Where is it - Télécharger - Gestion de fichiers
- Where is host file - Guide
- Where is my movie - Télécharger - Divers TV & Vidéo
- Where is appdata - Guide
- //./Root/cimv2 select * from __instancemodificationevent within 60 where targetinstance isa "win32_processor" and targetinstance.loadpercentage > 99 0x80041003 ✓ - Forum Windows Vista
1 réponse
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 :).
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;");