Page 1 sur 1
pseudo identique dans bdd
Posté : 26 mai 2014, 11:50
par laubanane
Bonjour,
Je suis embêtée par une requête : je cherche à savoir si un pseudo existe déjà dans ma base de donnée pour pas qu'il y ai de doublon.
$req = $bdd->prepare("SELECT COUNT(*) FROM `utilisateur` WHERE `pseudo` = $pseudo");
$req->execute(array($pseudo));
if ($req->fetchColumn() = 0) {
echo 'on rentre dans la boucle';
}
le message d'erreur est : Can't use method return value in write context
Re: pseudo identique dans bdd
Posté : 26 mai 2014, 11:58
par chapt0011
c'est quoi ce
= 0
dans ton if??
Re: pseudo identique dans bdd
Posté : 26 mai 2014, 12:02
par laubanane
ce que je voulais c'est que si ma requête donne '0' occurrence en réponse on rentre dans la boucle.
Re: pseudo identique dans bdd
Posté : 26 mai 2014, 12:06
par chapt0011
d'abord pour comparer deux valeurs on utilise == et non =
ensuite, la méthode fetchColumn
Retourne une colonne depuis la ligne suivante d'un jeu de résultats ou FALSE s'il n'y a plus de ligne.
d'après
La documentation de PHP.NET donc fait plutot
if($req->fetchColumn() == false)
//ou
if(count($req->fetchAll()) == 0)
Quoique je pense que ce que tu veux réellement est plutôt:
$req = $bdd->prepare("SELECT COUNT(*) as doublons FROM `utilisateur` WHERE `pseudo` = $pseudo");
$req->execute(array($pseudo));
if ($res=$req->fetchObject()) {
if($res->doublons==0) echo 'on rentre dans la boucle';
else echo 'il y a '.$res->doublons.' doublons';
}
}
Re: pseudo identique dans bdd
Posté : 26 mai 2014, 12:31
par laubanane
ça ne fonctionne pas.
et je ne comprend pas la condition : $res=$req->fetchObject()
Re: pseudo identique dans bdd
Posté : 26 mai 2014, 12:42
par chapt0011
La méthode fetch...() récupere et retourne une ligne du résultat de la requête!
et elle renvoie false s'il n'y a pas de ligne
dans le cas de ta requête il n'y aura qu'une et une seule ligne: ta requête... c'est un count()!
donc $res = $req->fetchObject() signifie je met sous forme d'objet la ligne de résultat et je l'enregistre dans $res.
cette condition sera toujours vrai tu va rentrer dedans a chaque fois!
(Il suffit de lire la doc de fetch!!!)
Bon de toute façon c'est pas la bonne méthode pour gérer des doublons: le SGBD s'en charge si tu met dans ta base le username à UNIQUE!
Re: pseudo identique dans bdd
Posté : 26 mai 2014, 13:45
par laubanane
Merci. Je sais que l'on peut utiliser la seconde méthode je cherchais à le faire par le code.
Re: pseudo identique dans bdd
Posté : 26 mai 2014, 15:46
par moogli
@chapt0011 : un p'tit lien vers la doc ?
effectivement une clause unique permet d'éviter le doublon, ceci c'est plus simple de traiter un message avec un count qu'avec une vielle erreur SQL sortie de derrière les fagot qu'il va falloir parser pour savoir s'il est possible d'utiliser ou non le pseudo.
Dans le cas le plus favorable c'est quand même mieux de prévenir avant l'insertion
@laubanane : as tu compris comment résoudre ton problème ou te manque t'il quelque chose ?
la documentation de la méthode fetch te fournit un exemple complet de ce que tu peux faire (c'est la même chose que fetchObject)
http://fr2.php.net/manual/fr/pdostatement.fetch.php
Pour faciliter l'utilisation de la donnée utilise un alias dans la requête sql (select count(1) as nombre from toto ....).
@+
Re: pseudo identique dans bdd
Posté : 26 mai 2014, 16:27
par chapt0011
@chapt0011 : un p'tit lien vers la doc ?
cf. mon premier post moogli

mais j'insistais un peu car cela me semblait très important de passer par là

Re: pseudo identique dans bdd
Posté : 26 mai 2014, 16:49
par laubanane
Je n'ai pas réussi mais je verrais cela demain.
Je ne comprend pas toujours les docs, au début c'est pas facile.