IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Numrows & result [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre chevronné
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2007
    Messages : 489
    Par défaut Numrows & result
    Bonjour,
    Je m'infuse la doc PDO mais une chose me chiffonne je n'ai pas trouvé comment la contourner.
    Avant PDO il était possible de retourner un résultat suite a un Query / Numrows en ne faisant donc qu'une requête :
    Je recherche l'ID d'un user s'il existe il me le retourne. La je dois faire deux requêtes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $nb_session = $pdo->query("SELECT COUNT(*) FROM sessions WHERE sess_key='".$_SESSION["sess_key"]."' AND sess_id='".$sess_id."'")->fetch();
    if ($nb_session['COUNT(*)'] == 0) {
    echo 'Pouet Pouet';
    } else {
    $q = $pdo->prepare("SELECT usrID FROM sessions  WHERE sess_key='".$_SESSION["sess_key"]."' AND sess_id='".$sess_id."'");
    $q->execute();
    $w=$q->fetch(PDO::FETCH_OBJ);
    $usrID = $w->usrID;
    }
    Ai je loupé quelque chose ?

    Merci je ne trouve pas.

  2. #2
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    1) Dans la première requête il est conseillé de donner un alias au COUNT(*) pour l'avoir en entête de colonne.

    2) Dans les deux requêtes, attention aux injections SQL en utilisant directement la $_SESSION !

    3) Pourquoi ne pas simplement utiliser que la seconde requête et compter le nombre de lignes retournées ?
    Si c'est zéro, l'utilisateur n'est pas trouvé dans la BDD et si c'est 1, l'utilisateur est trouvé et on a déjà récupéré, grâce à la requête, son identifiant.

    Que ce soit avec PDO ou avec mysqli_ ou même mysql_, il est inutile de faire d'abord un comptage puis une requête récupérant les infos.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  3. #3
    Membre chevronné
    Homme Profil pro
    Webmaster
    Inscrit en
    Janvier 2007
    Messages
    489
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2007
    Messages : 489
    Par défaut
    Merci pour ta réponse.
    Oui aucun problème pour les vars & les injections, je suis juste en local pour l'instant et effectue des tests.

    ° A ce propos mysql_real_escape_string étant deprecated est ce bindParam est suffisamment fiable ou est il utile de cleaner tout de même les variables avant de requêter ?

    ° J'arrive sur ce type de requête est satisfaisant ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $r_sess = $pdo->prepare("SELECT usrID FROM sessions WHERE sess_key = :sess_key AND sess_id = :sess_id") or exit(print_r($pdo->errorInfo()));
    $r_sess->bindParam(':sess_key', $sess_key, PDO::PARAM_STR);
    $r_sess->bindParam(':sess_id', $sess_id, PDO::PARAM_STR);
    $r_sess->execute();
    $num_rows = $r_sess->rowCount();
    if($num_rows=='1') { 
    $w=$r_sess->fetch(PDO::FETCH_OBJ);
    $usrID = $w->usrID;
    echo $usrID; 
    }
    Merci a toi / vous

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Le bindParam en précisant le type de valeur attendue est déjà pas mal.

    Tu as compris le principe.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. result: chaine de caractère pour une DLL
    Par Sephiroth Lune dans le forum Langage
    Réponses: 7
    Dernier message: 27/07/2004, 23h05
  2. Unable to save result set
    Par souf dans le forum Requêtes
    Réponses: 3
    Dernier message: 19/07/2004, 15h41
  3. datetime data type resulted in an out-of-range
    Par faamugol dans le forum ASP
    Réponses: 2
    Dernier message: 26/05/2004, 20h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo