[RESOLU] pseudo identique dans bdd

Eléphanteau du PHP | 13 Messages

26 mai 2014, 11:50

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

Eléphant du PHP | 95 Messages

26 mai 2014, 11:58

c'est quoi ce
= 0
dans ton if??
La b!te et le couteau sont bien souvent les meilleurs outils...mais aussi et surtout les seuls qui sont toujours à disposition!!

Eléphanteau du PHP | 13 Messages

26 mai 2014, 12:02

ce que je voulais c'est que si ma requête donne '0' occurrence en réponse on rentre dans la boucle.

Eléphant du PHP | 95 Messages

26 mai 2014, 12:06

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';
                                 } 
                                
}
La b!te et le couteau sont bien souvent les meilleurs outils...mais aussi et surtout les seuls qui sont toujours à disposition!!

Eléphanteau du PHP | 13 Messages

26 mai 2014, 12:31

ça ne fonctionne pas.
et je ne comprend pas la condition : $res=$req->fetchObject()

Eléphant du PHP | 95 Messages

26 mai 2014, 12:42

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!
La b!te et le couteau sont bien souvent les meilleurs outils...mais aussi et surtout les seuls qui sont toujours à disposition!!

Eléphanteau du PHP | 13 Messages

26 mai 2014, 13:45

Merci. Je sais que l'on peut utiliser la seconde méthode je cherchais à le faire par le code.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

26 mai 2014, 15:46

@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 ....).


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 95 Messages

26 mai 2014, 16:27

@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à :D
La b!te et le couteau sont bien souvent les meilleurs outils...mais aussi et surtout les seuls qui sont toujours à disposition!!

Eléphanteau du PHP | 13 Messages

26 mai 2014, 16:49

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.