0
votes

Comment obtenir une seule valeur pour les données que j'ai extraites de la base de données à l'aide de la fonction fetch

Je suis nouveau à PHP et j'avais choisi de coller au format PDO. J'ai pu mettre en place un système d'enregistrement et de connexion fonctionnel, mais mon défi consiste à récupérer des données de ma base de données qui seraient utilisées dans une autre page de la page de profil utilisateur que j'ai créée. J'avais essayé tous les nombreux exemples et méthodes que j'ai pu obtenir sur Internet, mais il n'ya pas de travail, ni plutôt que je ne sais pas comment l'utiliser, où je veux insérer la variable sera toujours vide. La seule fonction de récupération que j'ai pu obtenir choisira toute la ligne, par exemple, s'il s'agit d'un courrier électronique, il va chercher tous les courriels enregistrés de la base de données qui ne sont pas supposés être. L'e-mail ne doit être que pour l'utilisateur dont le profil est ouvert. Voici les codes. Je suis sûr que quelqu'un va m'aider à comprendre cela. Merci XXX

J'ai essayé tout ma petite connaissance de PHP mais tout en vain. Si je décide d'utiliser un autre, rien ne montrera.


3 commentaires

Qu'entendez-vous par «n'obtenir qu'une seule valeur»? La requête donnée est capable de sélectionner plusieurs lignes, et si vous n'en avez besoin que d'une seule, vous devez écrire du code pour ce filtre


"Par une valeur, je veux dire que si c'est l'e-mail que je veux, il ne doit s'agir que d'un seul e-mail associé à cet utilisateur, et non de tout l'e-mail de ma base de données. Merci


Eh bien, ajoutez un filtre. Il n'y a aucun moyen que nous puissions deviner à partir du code donné comment votre système utilisateur fonctionne


4 Réponses :


0
votes

Vous pouvez essayer une autre alternative pour obtenir le même résultat,

$stmt = $pdo->query('SELECT * FROM databasetable');
while ($row = $stmt->fetch())
{
    echo $row['email'] . "\n";
}


2 commentaires

Merci pour votre réponse. Je l'ai essayé mais cela me pose toujours le même problème. Quand je l'ai fait, il a récupéré tous les e-mails de la base de données. Mais ce que je veux, c'est un seul e-mail associé à l'utilisateur dont le tableau de bord est ouvert. Tout merci


$ stmt = $ pdo-> query ("SELECT * FROM databasetable where email like '". $ yourEmail. "'"); un enregistrement associé à l'email



0
votes

Si vous n'êtes intéressé que par l'e-mail des résultats renvoyés, j'essaierais de faire ce qui suit:

$stmt = $pdo->query('SELECT `email` FROM databasetable');
$data = $stmt->fetchAll(PDO::FETCH_ASSOC))

foreach($data as $row)
{
    echo $row['email'] . "\n";
}

Ou

$stmt = $pdo->query('SELECT `email` FROM databasetable');
while ($row = $stmt->fetch(PDO::FETCH_ASSOC))
{
    echo $row['email'] . "\n";
}

Si vous voulez vérifier que les données qui reviennent sont bonnes, j'ajouterais un " print_r ($ data); ".


2 commentaires

J'ai un autre problème après avoir utilisé les codes ci-dessus. Je ne sais pas ce que je ne fais pas. Lorsque je connecte un utilisateur, il ne sera redirigé que vers un seul utilisateur. Par exemple, lorsque je connecte un utilisateur, il sera redirigé vers «greeser» (un nom d'utilisateur dans la base de données). Toute autre tentative de connexion sera redirigée vers 'greeser'. Je ne sais pas comment résoudre ça. Quelqu'un peut-il m'aider.


Dans le commentaire de la requête, vous aurez besoin d'une clause WHERE. // sélectionne un utilisateur particulier par id $ stmt = $ pdo-> prepare ("SELECT * FROM utilisateurs WHERE id =: id"); $ stmt-> execute (['id' => $ id]); $ utilisateur = $ stmt-> fetch ();



0
votes

Vous pouvez simplement prendre le premier élément des résultats.

$stmt = $pdo->query('SELECT `email` FROM databasetable LIMIT 1');
$data = $stmt->fetch(PDO::FETCH_ASSOC);

ou utiliser fetch()

$stmt = $pdo->query('SELECT `email` FROM databasetable LIMIT 1');
$data = $stmt->fetchAll(PDO::FETCH_ASSOC)[0];

J'ai également mis un LIMIT à la fin de votre requête, pour que vous ne récupériez pas les données inutiles.


1 commentaires

Merci pour toute votre aide, ils ont tous bien fonctionné pour moi. Je suis heureux de faire partie de cette grande communauté



0
votes

À moins que je ne manque quelque chose, vous devriez sûrement spécifier un endroit dans votre requête SQL, pourquoi voudriez-vous obtenir toute la base de données et la parcourir jusqu'à ce que vous trouviez l'e-mail que vous voulez?

Lorsque vous redirigez l'utilisateur connecté, vous devez (ou si vous ne l'êtes pas, vous devriez) transmettre quelque chose à propos de l'utilisateur, par exemple en définissant l'ID utilisateur dans la session. Ensuite, vous pouvez l'utiliser pour créer des données de profil plus utiles avec une requête qui dit sélectionnez l'e-mail dans la table où userid =: userid - alors lorsque vous récupérez le résultat, vous aurez les données dont vous avez besoin.

Naturellement, je ne peux pas écrire la requête exacte sans connaître votre structure, mais obtenir à chaque fois toute une table de données n'est pas évolutif


2 commentaires

Merci jameson2012. Je suis vraiment nouveau sur php, alors veuillez excuser mes questions de base. S'il vous plaît, vous avez parlé de structure («Je ne peux pas écrire la requête exacte sans connaître votre structure»). Je ne sais pas ce que vous entendez par structure, est-ce un framework comme bootstrap ou quelque chose comme ça.


Je veux dire la structure de votre base de données, quelles tables vous avez, quels sont les liens entre elles, etc.