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 :

connexion BD, avis sur deux fonctions


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    graphisme & impression
    Inscrit en
    Mars 2011
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : graphisme & impression

    Informations forums :
    Inscription : Mars 2011
    Messages : 118
    Par défaut connexion BD, avis sur deux fonctions
    Bonjour à tous,

    Je suis débutant en programmation et je souhaiterais avoir votre avis sur deux fonctions que j'ai faite.
    J'ai fait une fonction Requete SQL avec un try catch si il y a une erreur et je la rappelle dans mes fonction pour afficher des données.
    Ma question est la suivante, le passage par ma boucle while est-il obligé (copie des données dans un tableau), ne peut-on pas faire simplement $listePays = $resultat pour tout copier!
    J'ai commenté ma question lignes 27-28!

    Merci beaucoup c'est très gentil!
    Bonne journée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
     
            $listePaysOrderByPopDeuxMio = afficheTabHabitantsDeuxMio($bd);
            foreach($listePaysOrderByPopDeuxMio as $ligne){
                echo $ligne['Pays'].' '.$ligne['an_2002'].'<br />';
            }
     
     
     
        // --------------------------------------- function -----------------------------------------------------------------------
     
        function requeteSQL($paramBdPDO, $paramRequete){
            try{
                $reponse = $paramBdPDO->query($paramRequete);
            }
            catch (Exception $e)
            {
                exit('<b>Catched exception at line '. $e->getLine() .' :</b> '. $e->getMessage());
            }
            return $reponse;
        }
     
        function affichePaysOrdreAlph($paramBdPDO){
            $sql = 'SELECT * FROM population ORDER BY pays';
            $resultats = requeteSQL($paramBdPDO, $sql);
            $listePays = array();
            // le while est-il utili ici? Pour moi requete retourne un tableau
            // donc on pourrait le retourner tel quel, mais sa ne marche pas si je ferme le cusor
            while($ligneDonnes = $resultats->fetch()){
                array_push($listePays, $ligneDonnes);
            }
            $resultats->closeCursor();
            return $listePays;
        }
     
        /** Les pays sont répartis entre 4 tableaux en fonction de la population en 2002 : 
         * <1 mio habitants, entre 1 et 10 mio, entre 10 et 100 mio, >1 mio habitants.
         */
        function afficheTabHabitants($paramBdPDO){
            $sql = 'SELECT * FROM population WHERE an_2002 < 1000';
            $resultats = requeteSQL($paramBdPDO, $sql);
     
            $listePays = array();
     
            while($ligneDonnes = $resultats->fetch()){
                array_push($listePays, $ligneDonnes);
            }
            $resultats->closeCursor();
            return $listePays;
        }
     
        function afficheTabHabitantsDeuxMio($paramBdPDO){
            $sql = 'SELECT * FROM population WHERE an_2002 > 1000';
            $resultats = requeteSQL($paramBdPDO, $sql);
     
            $listePays = array();
     
            while($ligneDonnes = $resultats->fetch()){
                array_push($listePays, $ligneDonnes);
            }
            $resultats->closeCursor();
            return $listePays;
        }

  2. #2
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 327
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 327
    Billets dans le blog
    17
    Par défaut
    PDO::query( ) ne lève pas d'exceptions (cf. la doc http://fr2.php.net/pdo.query ), donc inutile de mettre un try/catch autour.

    Pour tout récupérer d'un coup il existe PDOStatement::fetchAll( ) ( http://fr2.php.net/pdostatement.fetchall ).

  3. #3
    Membre confirmé
    Homme Profil pro
    graphisme & impression
    Inscrit en
    Mars 2011
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : graphisme & impression

    Informations forums :
    Inscription : Mars 2011
    Messages : 118
    Par défaut merci, j'ai regardé la doc
    Bonjour,

    Merci beaucoup pour ton conseil c'est super! J'ai regardé la doc et je pense qu'on peut demander à PDO de soulever une exception.

    - j'utilise queryAll pour avoir tout le tableau
    - je demande d'afficher les exception
    - Dois-je fermer le curseur?

    Merci beaucoup c'est vraiment sympa!
    Bonne journée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    // accès sur local
            $hostname = "localhost";
            $username = "root";
            $password = "root";
            $dbname = "revisionsPHP";
            // afficher les personnes avec lien mailto
            try{
                $bd = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $password);
                /**
                 * set attribute permet d'indiquer à PDO qu'on ne veut pas des erreurs silencieuses
                 */
                $bd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
            }
            catch(Exception $e)
            {
                exit('connexion à la bd à échouer :<br />'. $e->getMessage());
            }
     
     
     
     
        // --------------------------------------- functions -----------------------------------------------------------------------
     
        function requeteSQL(PDO $paramBdPDO, $paramRequete){
            try{
                $reponse = $paramBdPDO::fetchAll($paramRequete);
            }
            catch (Exception $e)
            {
                exit('<b>Catched exception at line '. $e->getLine() .' :</b> '. $e->getMessage());
            }
            return $reponse;
        }
     
        function fonctionCorrige(PDO $paramBdPDO){
            $sql = 'SELECT * FROM population WHERE an_2002 > 1000';
     
            $resultats = requeteSQL($paramBdPDO, $sql);
            return $resultats;
        }

Discussions similaires

  1. Avis sur deux livres
    Par arkerone dans le forum Intelligence artificielle
    Réponses: 1
    Dernier message: 18/01/2011, 12h12
  2. Réponses: 8
    Dernier message: 25/06/2009, 18h18
  3. Avis sur deux livres ?
    Par Frank dans le forum Test
    Réponses: 2
    Dernier message: 20/10/2008, 16h02
  4. Réponses: 9
    Dernier message: 02/09/2008, 13h52
  5. Avis sur la fonction de chef de Projet
    Par ludovic.fernandez dans le forum Etudes
    Réponses: 5
    Dernier message: 27/04/2007, 11h13

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