Problème avec la fonction quote()

Eléphanteau du PHP | 39 Messages

13 déc. 2011, 23:51

Bonsoir,

Voilà il se peut que j'ai oublié quelque chose d'évident mais l’évidence me bloque depuis maintenant plusieurs heures.

J'ai une méthode de création de membre qui a le rôle d'ajouter dans ma base des membres.
Dans cette méthode et pour protéger ma variable j'utilise la méthode quote(), comme ceci:
$prepare->execute(array(
                ':login' => $db->getConnection()->quote(parent::getLogin()),
                [...]));
Je tiens à préciser que cette méthode fonctionne et m'insère les données.

J'ai une autre méthode qui quant à elle, vérifie l'existence d'un membre.
    /**
     *
     * @param string $login
     * @return bool 
     */
    public static function isMember($login){
        try{
            $db = new Connection();
            $member = $db->getConnection()->query("SELECT COUNT(*) as nb FROM users where login = ".$db->getConnection()->quote($login)."");
            $nb = $member->fetchAll();
            var_dump($nb);
            return ($nb[0][0] > 0) ? true : false;
        }
        catch (Exception $e){
            echo 'Erreur isMember' . $e->getMessage();
        }
    }
Je pensais avoir un problème avec cette méthode puisque bien que l'utilisateur 'damien' soit créé elle me retournait 0.
Mais je me suis rendu compte que même en exécutant dans le prompt la requête, elle me retourne 0.

Alors que le login existe.

Si j'effectue un
select * from users;
voici une partie de ce que j'obtiens
iduser	login	
45	'damien'
Si j'effectue un
select COUNT(*) as nb from users where login = 'damien';
J'obtiens: 0

Voilà, si vous avez des idées je vous en remercie par avance.

Bonne soirée.

Damien.

ViPHP
xTG
ViPHP | 7331 Messages

14 déc. 2011, 08:12

Dans ton premier code le PDO::quote() est inutile vu qu'elle est appelée automatiquement par PDO::prepare().

Pour ton souci de select, tu n'aurais pas un espace ou un caractère non imprimable en plus de damien d'enregistré ? Affiches la longueur de la chaîne quand tu fais un select *

Eléphanteau du PHP | 39 Messages

14 déc. 2011, 10:49

Bonjour et merci pour ta réponse.

J'ai tout d'abord fais sans quote() mais l'insertion ne fonctionnait pas :?

Sinon tu as pointé du doigt le problème: lors de l'insertion il devait y avoir des doubles quotes.

Merci de m'avoir mis sur la piste :)

Bonne journée.

devlop78
Invité n'ayant pas de compte PHPfrance

20 janv. 2012, 18:40

Dans ton premier code le PDO::quote() est inutile vu qu'elle est appelée automatiquement par PDO::prepare().

Pour ton souci de select, tu n'aurais pas un espace ou un caractère non imprimable en plus de damien d'enregistré ? Affiches la longueur de la chaîne quand tu fais un select *

Je pensais que xTG allait trouver mais tout simplement le quote() + la requête préparée font que la valeur stockée dans la table n'est pas "damien" mais "'damien'", donc avec les simples quotes en plus.

Je t'invite donc à essayer

SELECT COUNT(*) AS nb FROM users WHERE login = '\'damien\'';