Requête SQL dans PHP
RésoluGuytoune -
Bonjour,
Petit problème de syntaxe (je pense) je n'arrive pas à écrire ma requête SQL en PHP avec PDO.
Ma requête SQL :
SELECT libelle FROM mail WHERE mymail LIKE "%***@***%"
(Elle fonctionne sur mySQL)
Ma requête avec PDO :
$mail = $user->getMail();
$req = "SELECT libelle FROM mail WHERE mymail LIKE '%:mail%'";
$stmt = $this->getBdd()->prepare($req);
$stmt->bindValue(":mail", $mail , PDO::PARAM_STR);
$stmt->execute();
$resultat = $stmt->fetch(PDO::FETCH_ASSOC);
$stmt->closeCursor();
var_dump($resultat);
Mon var_dump me retourne ça :
bool(false)
Alors qu'il devrait me retourné un libellé, des idées de comment écrire ça ?
Windows / Firefox 102.0
3 réponses
-
Hello!
As tu quelques exemples des données passées dans mail ?
Le retour a false indique qu'il n'y a pas de resultat
-
Salut, merci pour ta réponse,
Voilà :
var_dump($mail); echo($mail);
Qui me retourne :
Liste de diffusion : string(18) "***@***" ***@***Pour plus d'infos : je prend l'email de mon user sur une interface de modification de cet user et je cherche à retourner le nom des listes de diffusions dans lesquels il est inscrit.
Donc $mail retourne bien ce qu'il me faut.
EDIT : l'éditeur de code me censure mon mail automatiquement mais c'est un email basique du style : nom.prenomarobasesociete.com
-
-
A vérifier mais tu n'as peut-être pas besoin des simples quotes dans la requête :
> $req = "SELECT libelle FROM mail WHERE mymail LIKE :mail"; > $stmt->bindValue(":mail", "%" . $mail . "%" , PDO::PARAM_STR);le bind value doit mettre des quotes + les tiennes ca doit généré une requete bizarre
-
Okay on se rapproche pcq il m'a bien retourné une liste de diffusion, mais le problème c'est qu'il devrait en avoir plusieurs.
Le var_dump :
Liste de diffusion : array(1) { ["libelle"]=> string(4) "TEST" }D'après ce qu'il y a dans ma table il devrait me retourner un array(3) avec 2 autres libelle en plus.
Une idée pour cette anomalie ?
EDIT : j'ai oublié de préciser mais j'ai repris ta méthode :
$mail = $user->getMail(); $req = "SELECT libelle FROM mail WHERE mymail LIKE :mail"; $stmt = $this->getBdd()->prepare($req); $stmt->bindValue(":mail", "%". $mail. "%", PDO::PARAM_STR); $stmt->execute(); $resultat = $stmt->fetch(PDO::FETCH_ASSOC); $stmt->closeCursor(); var_dump($resultat);
-
-
Normal tu fermes le curseur après un fetch, soit tu utilises un fetchAll
Soit tu passes par :while ($resultat = $stmt->fetch(PDO::FETCH_ASSOC)){ .... } $stmt->closeCursor();