Requête SQL dans PHP

Résolu/Fermé
Guytoune - 20 déc. 2022 à 15:59
 Guytoune - 21 déc. 2022 à 14:13

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

A voir également:

3 réponses

tlegendre Messages postés 63 Date d'inscription mercredi 10 février 2021 Statut Webmaster Dernière intervention 12 décembre 2024 8
20 déc. 2022 à 16:14

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


0

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

0
tlegendre Messages postés 63 Date d'inscription mercredi 10 février 2021 Statut Webmaster Dernière intervention 12 décembre 2024 8
20 déc. 2022 à 16:54

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

0

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);
0
tlegendre Messages postés 63 Date d'inscription mercredi 10 février 2021 Statut Webmaster Dernière intervention 12 décembre 2024 8
Modifié le 21 déc. 2022 à 09:46

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();

0

Ah ouii ! le fetchAll, bien vu, merci bcp pour l'aide, problème résolu :) 

A+, 

Guy

0