Partage
  • Partager sur Facebook
  • Partager sur Twitter

query et prepare (bool) et fetchColumn

Sujet résolu
    19 septembre 2017 à 12:39:04

    Bonjour

    je suis dans le cour de POO

    je veux comprendre ces deux requêtes s'il vous plait

    <?php
     if (is_int($info)) // On veut voir si tel personnage ayant pour id $info existe.
        {
          return (bool) $this->_db->query('SELECT COUNT(*) FROM personnages WHERE id = '.$info)->fetchColumn();
        }   
        $q = $this->_db->prepare('SELECT COUNT(*) FROM personnages WHERE nom = :nom');
        $q->execute([':nom' => $info]);
    return (bool) $q->fetchColumn();
    ?>

    A mon avis, ce que j'ai comrpis

    le code est écrit en 2 méthodes différentes

    1- query fait la requête et l’exécution par contre prépare c'est juste préparer la requete il lui faut un execute()

    2- les valeurs des paramètres c'est sécurisés ??? moi j'utilise toujours binValue

    3- je n'arrive pas à comprendre ça 

    return (bool) ....... (dans les deux requête)

    merci

    • Partager sur Facebook
    • Partager sur Twitter
      19 septembre 2017 à 12:43:42

      Salut,

      dans le désordre ^^

      3) c'est ce qu'on appelle un CAST => un transtypage si tu préfères, dans notre cas, on transforme le retour en booléen.

      2) ça dépend si la méthode peut être appelée de l'extérieur ou pas, dans le second cas, j'imagine que la donnée a été sécurisée.

      1) oui, mais si tu regarde l'enchainement, si on passe dans le if on ne fais pas le prepare suivant, ou alors j'ai pas compris cette question.

      ++

      • Partager sur Facebook
      • Partager sur Twitter
        19 septembre 2017 à 13:05:36

        salut, merci à toi,

        je vais suivre le désordre

        3)bon la requete elle compte le nombre de lignes ou l'id =$info

        (bool) : fait 

        si il trouve alors -=>true

        si il ne trouve pas =>false

        c'est ça ???

        2) l'appel c'est de l'extérieur

        vous me dite prepare c'est sécurisé comment ???

        1) c'est ok

        alors que moi j'ai l'habitude d'utilise bindValue qui permet de mieux sécuriser les valeurs entrantes ??

        • Partager sur Facebook
        • Partager sur Twitter
          19 septembre 2017 à 13:10:13

          3) oui le retour de fetchColumn() sera 1 ou 0 (1 perso ou aucun), et (bool) 1 => VRAI, (bool) 0 => FAUX

          2) le code est dans un script, si c'est un script appelé par d'autres script (donc en "interne" et pas directement depuis l'url) je peux supposer que le(s) script(s) appelant(s) ont déjà vérifié que la donnée est sûre

          Mais tu peux aussi faire "ceinture et bretelles" en mettant toujours le bindValue() ;)

          D'ailleurs le cours est mal fait, car execute() retourne un booléen, donc s'ill plante il retourne FALSE, comme le retour n'est pas testé, l'appel de fetchColumn() lève une exception que tu devras trapper (try/catch)

          ++

          • Partager sur Facebook
          • Partager sur Twitter
            19 septembre 2017 à 13:22:29

            2) alors a été vérifier par isset et autre fonction php de sécurisation, c'est ça ??

            alors là si tu me dis que le cours est mal fait, comment ferai je pour apprendre a bien coder ?

            • Partager sur Facebook
            • Partager sur Twitter
              19 septembre 2017 à 13:26:31

              Salut,

              avec une gestion des erreurs PDO::ERRMODE_EXCEPTION (avec le mode émulé) par exemple, le execute (sinon c'est le prepare) lui lancera une exception (erreur de syntaxe par exemple) donc le fetchColumn ne sera pas atteint. Maintenant pas sûr que fetchColumn lève une exception

              • Partager sur Facebook
              • Partager sur Twitter
              le bienfait n'est jamais perdu
                19 septembre 2017 à 13:39:47

                bon j'ai tout compris

                merci à vous

                • Partager sur Facebook
                • Partager sur Twitter

                query et prepare (bool) et fetchColumn

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown