8721 sujets

Développement web côté serveur, CMS

Bonjour à Tous,

Pas très familier aves les requêtes PDO, je me casse les dents sur la récupération d'un username associé à une adresse mail dans une base de données users.

Voici mon code qui ne fonctionne pas et qui me parait compliqué en raison de la présence de la boucle while, dans la BD il n'existe qu'une adresse mail associé à un username.
Il doit être possible de faire plus simple, mais je ne sais pas faire.

<?php

//Connexion à la base de données    
	require_once 'inc/db.php';
	
   $to= 'prenom.nom@gmail.com';
	
    $req = $pdo->prepare("SELECT username , email FROM users WHERE email= ? ");
    $req->execute([$to]);

    while ($donnees = $req->fetch())
	{
		echo $donnees['username'] . ' appartient à ' . $donnees['email'] . '<br />';
	}
	$reponse->closeCursor();
			
?>


Merci par avance pour votre aide.

Patrick Mara
Cordialement
Bonjour,
il faut que tu définisse un paramètre dans le prepare pour pouvoir le définir dans le execute :


$to= 'prenom.nom@gmail.com';

$req = $pdo->prepare("SELECT username , email FROM users WHERE email= :email ");
$req->execute([
    'email' => $to
]);


Gilles
gillesr a écrit :
Bonjour,
il faut que tu définisse un paramètre dans le prepare pour pouvoir le définir dans le execute :


$to= 'prenom.nom@gmail.com';

$req = $pdo-&gt;prepare("SELECT username , email FROM users WHERE email= :email ");
$req-&gt;execute([
    'email' =&gt; $to
]);


Gilles


Pas forcement, même la méthode qu'il a utilisé devrai fonctionner. je pense que le probleme est avec sa boucle, bien que le code me semble correct (sauf la dernière ligne).

Je te propose ceci

<?php

//Connexion à la base de données    
require_once 'inc/db.php';
	
$to= 'prenom.nom@gmail.com';
	
$req = $pdo->prepare("SELECT username , email FROM users WHERE email = ? ");
$req->execute([$to]);

$donnees = $req->fetch(); // etant donnée que tu n'a qu'un seul utilisateur avec cet email, la boucle n'est plus nécessaire

echo $donnees['username'] . ' appartient à ' . $donnees['email'] . '<br />';


$req->closeCursor(); // Je pense que l'erreur venait d'ici, c'est $req au lieu de $reponse
			
?>
Bonjour,

J'ai finalement trouvé, l'erreur était dans l'extraction du $username dans $resultat

$to = $_POST['email'];		
/*Sélectionne les valeurs dans les colonnes username et email de la table users */
         $sth = $pdo->prepare("SELECT username, email FROM users WHERE email = ?");
         $sth->execute([$to]);
 /*Retourne un tableau associatif pour chaque entrée de notre table avec le nom des colonnes sélectionnées en clefs*/			
         $resultat = $sth->fetch(PDO::FETCH_ASSOC);
         $username = $resultat['username'];	


Merci pour votre aide
Cordialement
Patrick Mara