par
Ryle » 12 mai 2021, 18:03
La méthode fetch() de PDO retourne false si une erreur survient. Le fait que ta requête ne retourne pas d'enregistrement parce qu'elle n'en a pas trouvé en base n'est pas une erreur et ta variable $user ne contient jamais la valeur false à moins d'une erreur technique. Tu peux afficher celle-ci pour vérifier son contenu, qui devrait être un tableau vide.
Tu peux alors dans ton test vérifier si $user est vide (avec empty()), ou utiliser la solution de Shadowwera en comptant le nombre d'enregistrements retournés.
A mon sens, l'inconvénient de ces méthodes, c'est qu'elles retournent toutes les informations associées à l'adresse mail dans ta table, dont tu n'as que faire parce que tu veux juste savoir si l'enregistrement existe ou non. Bien que cela fonctionne parfaitement et que l'écart en terme de performance sera sans doute minime, je préfère pour ma part utiliser une requête avec un COUNT() qui retourne toujours un résultat, celui-ci correspondant au nombre d'enregistrements trouvés (sans retourner inutilement le détail de ceux-ci, ce qui pourrait être volumineux alors que je n'en ai que faire).
require_once 'config.php';
$stmt = $pdo->prepare("SELECT COUNT(*) AS nb FROM neuw WHERE email=?");
$stmt->execute([$email]);
$user = $stmt->fetch();
if ($user['nb'] > 0) {
// email existe
} else {
// email n'existe pas
}
La méthode fetch() de PDO retourne false si une erreur survient. Le fait que ta requête ne retourne pas d'enregistrement parce qu'elle n'en a pas trouvé en base n'est pas une erreur et ta variable $user ne contient jamais la valeur false à moins d'une erreur technique. Tu peux afficher celle-ci pour vérifier son contenu, qui devrait être un tableau vide.
Tu peux alors dans ton test vérifier si $user est vide (avec empty()), ou utiliser la solution de Shadowwera en comptant le nombre d'enregistrements retournés.
A mon sens, l'inconvénient de ces méthodes, c'est qu'elles retournent toutes les informations associées à l'adresse mail dans ta table, dont tu n'as que faire parce que tu veux juste savoir si l'enregistrement existe ou non. Bien que cela fonctionne parfaitement et que l'écart en terme de performance sera sans doute minime, je préfère pour ma part utiliser une requête avec un COUNT() qui retourne toujours un résultat, celui-ci correspondant au nombre d'enregistrements trouvés (sans retourner inutilement le détail de ceux-ci, ce qui pourrait être volumineux alors que je n'en ai que faire).
[php]require_once 'config.php';
$stmt = $pdo->prepare("SELECT COUNT(*) AS nb FROM neuw WHERE email=?");
$stmt->execute([$email]);
$user = $stmt->fetch();
if ($user['nb'] > 0) {
// email existe
} else {
// email n'existe pas
}[/php]