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 :

PDO : Insérer le résultat retourné par une requête dans un tableau [PDO]


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2015
    Messages : 7
    Points : 4
    Points
    4
    Par défaut PDO : Insérer le résultat retourné par une requête dans un tableau
    Bonjour,

    Je me tourne vers vous parce que je ne sais pas comment utiliser correctement PDOStatement::fetchAll (), ma requête de base est :


    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
    if(isset($_POST['affiche'])==true){ 
                    try{
                        $base = new PDO('mysql:host=127.0.0.1;dbname=****', 'root', '');
                        $base->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
     
                        $resultat = $base-> query('SELECT id_site, nom, infrastructure, nb_cmd, UC FROM site WHERE id_site ='.$_POST['affiche']);
     
                        while ($ligne= $resultat -> fetch()){
                            echo "ID site : ".$ligne['id_site'].'<br>';
                            echo "Nom : ".$ligne['nom'].'<br>';
                            echo "Infrastructure : ".$ligne['infrastructure'].'<br>';
                            echo "Nombre de Commande : ".$ligne['nb_cmd'].'<br>';
                            echo "Unitée Comptable : ".$ligne['UC'].'<br>';
                            $resultat->closeCursor();
                                                            }
                        } catch(Exception $e) {
                            die('<b>Exception à la ligne : '. $e->getLine() .':</b> erreur : '.$e->getMessage());
                                               }
    Merci de vos futurs explications.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Je ne sais pas pourquoi tu nous parles de fetchAll puisque tu ne l'utilises pas.
    Enlève le closeCursor, il sert à libérer le jeu de résultat ; c'est un peu gênant de l'avoir dans la boucle qui lit les résultats justement.

  3. #3
    Candidat au Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2015
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Je ne l'utilise pas parce que je ne sais pas vraiment comment l'utiliser, d'où mon message ici.
    Enfin .. Je me demandais comment, je pouvais mettre ce que retour cette requête dans un tableau .. histoire qu'à l'affichage ça soit un peu plus .. beau ? & moins liste de course.

  4. #4
    Membre éclairé
    Homme Profil pro
    Formateur en informatique
    Inscrit en
    Septembre 2012
    Messages
    416
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Formateur en informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Septembre 2012
    Messages : 416
    Points : 746
    Points
    746
    Par défaut
    Bonjour,

    voici un exemple d'utilisation de fetchAll() à partir de ton code.

    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
    if(isset($_POST['affiche'])){ 
                    try{
                        $base = new PDO('mysql:host=127.0.0.1;dbname=****', 'root', '');
                        $base->setAttribute(PDO::ATTR_ERRMODE,PDO::ERRMODE_EXCEPTION);
     
                        $stmt = $base->prepare('SELECT id_site, nom, infrastructure, nb_cmd, UC FROM site WHERE id_site=?;');
     
                        $stmt->bindValue(1, $_POST['affiche'], PDO::PARAM_STR); // ou PDO::PARAM_INT si id_site est un entier
     
                        $stmt->execute();
     
                        $resultat = $stmt->fetchAll(); // récupère toutes les lignes de la requête dans un tableau
     
                        // exit(var_dump($resultat); // pour afficher les resultats bruts à des fins de débogage
     
                        if(!empty($resultat)) {
                            foreach($resultat as $ligne) {
                               echo "ID site : ".$ligne['id_site'].'<br>';
                               echo "Nom : ".$ligne['nom'].'<br>';
                               echo "Infrastructure : ".$ligne['infrastructure'].'<br>';
                               echo "Nombre de Commande : ".$ligne['nb_cmd'].'<br>';
                               echo "Unitée Comptable : ".$ligne['UC'].'<br>';
                            }
                        }
     
                        } catch(PDOException $e) {
                            die('<b>Exception à la ligne : '. $e->getLine() .':</b> erreur : '.$e->getMessage());
                                               }
    Par contre, il faut protéger tes données en entrée, je t'ai donc mis une requête préparée.

    Je te recommande vivement la lecture de cet article : Comprendre PDO.

  5. #5
    Candidat au Club
    Femme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2015
    Messages
    7
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2015
    Messages : 7
    Points : 4
    Points
    4
    Par défaut
    Merci pour ta réponse Valaendra ! Je vais pouvoir la mettre en application pour mes requêtes ainsi que pour les requêtes futures !!!

  6. #6
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    FetchAll ne sert pas à faire des tableaux HTML.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $ligne= $resultat -> fetch();
    echo '<table>
               <tr><td>ID site : </td><td>'.$ligne['id_site'].'</td></tr>
    		<tr><td>Nom :</td><td>'.$ligne['nom'].'</td></tr>
    		<tr><td>Infrastructure :</td><td>'.$ligne['infrastructure'].'</td></tr>
        </table>';

  7. #7
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 470
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 470
    Points : 5 828
    Points
    5 828
    Billets dans le blog
    1
    Par défaut
    J'ai appris récemment à faire des requêtes préparées sans se servir de bindparam :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $stmt = $base->prepare('SELECT id_site, nom, infrastructure, nb_cmd, UC FROM site WHERE id_site=?;');
    $stmt->execute(array($_POST['affiche']));
    et si on préfère un marqueur nommé :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $stmt = $base->prepare('SELECT id_site, nom, infrastructure, nb_cmd, UC FROM site WHERE id_site=:site;');
    $stmt->execute(array(':site' => $_POST['affiche']));

    et dans la réponse de Sabotage, je préciserais qu'il s'agit d'un fetch associatif : $ligne= $resultat -> fetch(PDO::FETCH_ASSOC);

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/04/2008, 23h23
  2. Réponses: 2
    Dernier message: 31/05/2007, 10h57
  3. Problème de résultat retourné par une procédure stockée
    Par Access Newbie dans le forum Access
    Réponses: 23
    Dernier message: 17/08/2006, 11h42
  4. [SQL] Valeur retournée par une requête...
    Par Empty_body dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 04/01/2006, 22h13
  5. PSQLException "Aucun résultat retourné par la requête&q
    Par BRAUKRIS dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 15/09/2005, 20h55

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