Php : requete en fonction de variables

Fermé
benoit22 - 21 févr. 2011 à 16:01
chico200987 Messages postés 791 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 30 juillet 2018 - 21 févr. 2011 à 16:18
Bonjour,


J'ai une résultat de requête incorrect qui je pense est due à une comparaison de deux variables de types différents.
Auriez-vous l'amabilité de m'indiquer si mon interprétation est juste où si l'erreur se situe ailleurs.
En tout cas, merci.

par la méthode POST, je transmets le choix d'une liste déroulante à un fichier cible.php
J'ai vérifié que la valeur passe en faisant

$choix = $_POST['choix'];
echo "choix " . $choix ."<br/>";

J'obtiens
choix toto

Je veux utiliser cette variable pour trier une table

Si la valeur du champ est en dur dans la requête mes informations s'affichent
$req = $bdd->prepare('SELECT champs2 FROM matable WHERE champs1 = \'toto\'');

Si je trie sur ma variable, la requête ne me renvoie aucun résultat
$req = $bdd->prepare('SELECT champs2 FROM matable WHERE champs1 = ?');
$req->execute(array($_POST['choix']));

Je précise que champs1 est de type varchar(255)

J'ai aussi essayé avec
$req = $bdd->prepare('SELECT champs2 FROM matable WHERE champs1 LIKE ?');
$req->execute(array($_POST['choix']));

Est-ce que j'essaie de comparer deux variables de types différents ?
Dans ce cas, cela expliquerait peut-être que je n'obtienne aucun résultat...
Dois-je procéder à un CAST ou utiliser la fonction strcmp, mais dans les deux cas, je ne sais pas comment inclure cela dans la requête. Faut-il faire deux requêtes successives ?

Merci de votre aide
A voir également:

2 réponses

foobar47 Messages postés 13536 Date d'inscription jeudi 9 janvier 2003 Statut Contributeur Dernière intervention 16 mai 2014 533
21 févr. 2011 à 16:11
Bonjour,

Pourquoi ne pas mettre

champs1 = $choix

?
0
chico200987 Messages postés 791 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 30 juillet 2018 143
21 févr. 2011 à 16:18
Surement pour éviter de gérer soit-même l'SQL Injection dans les paramètres.

cf : https://www.php.net/manual/fr/pdo.prepare.php#90209
0
chico200987 Messages postés 791 Date d'inscription mardi 6 avril 2004 Statut Membre Dernière intervention 30 juillet 2018 143
21 févr. 2011 à 16:15
Salut,

Je n'ai jamais fait de PDO mais essaie peut-etre :

$req = $bdd->prepare('SELECT champs2 FROM matable WHERE champs1=:choix');
$req->bindParam(':choix', $_POST['choix']);
$req->execute(); 
0