Partage
  • Partager sur Facebook
  • Partager sur Twitter

[MySQL] colonnes dupliquées

avec pour titre 0, 1, 2, 3

Sujet résolu
    24 juillet 2011 à 20:39:34

    Bonjour,

    J'essaie de créer un script php qui fait un select dans une base MySQL et qui écrit le résultat dans un fichier CSV. (la base quoi :-)

    Je ne comprends pas pourquoi la requête me retourne les champs dupliqués avec pour titre 0, 1, 2 , 3 etc.
    La requête marche pourtant bien avec phpadmin.

    Ca dit quelque chose à quelqu'un ou je dois faire passer le code et le fichier généré ?

    Merci de votre aide
    • Partager sur Facebook
    • Partager sur Twitter
      24 juillet 2011 à 23:01:31

      Bonjour,

      Qu'est-ce que tu veux dire "pour titre 0, 1, 2, 3" ?
      Du concret serait peut-être la bienvenue.
      • Partager sur Facebook
      • Partager sur Twitter
        25 juillet 2011 à 8:00:23

        voilà le résultat obtenu avec mon script php:

        produit;0;qte;1;prenom;2;nom;3;num_cmd;4
        "Beurre - : doux";"Beurre - : doux";1;1;Alexandre;Alexandre;ZERBIB;ZERBIB;2;2
        "CrËme fraÓche";"CrËme fraÓche";2;2;Alexandre;Alexandre;ZERBIB;ZERBIB;2;2
        "Lait - : entier";"Lait - : entier";1;1;Jean;Jean;Frei;Frei;4;4

        voilà le résultat obtenu avec la même requête depuis myPhpAdmin :

        "produit";"qte";"prenom";"nom";"num_cmd"
        "Beurre - : doux";"1";"Alexandre";"ZERBIB";"2"
        "Crème fraîche";"2";"Alexandre";"ZERBIB";"2"
        "Lait - : entier";"1";"Jean";"Frei";"4"

        Tu vois les colonnes dupliquées avec pour titre 0 1 2 3 4 ?
        • Partager sur Facebook
        • Partager sur Twitter
          25 juillet 2011 à 10:23:11

          Bonjour,
          T'utiliserais pas mysql_fetch_array pour extraire tes données?
          Le mysql_fetch_array extrait les données sous forme d'un tableau ou les données sont effectivement dupliquées
          car associées d'une part au nom de la colonne et d'autre part à l'id de la colonne.

          Si jamais c'est ça essaye avec un mysql_fetch_assoc ou précise le type que tu veux (ici mysql_assoc) en option.

          http://php.net/manual/en/function.mysql-fetch-array.php

          ex :
          while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
              printf("ID: %s  Name: %s", $row["id"], $row["name"]);
          }
          
          • Partager sur Facebook
          • Partager sur Twitter
            25 juillet 2011 à 10:42:24

            Non j'utilise fetch. En fait c'est bizarre ça me fait ça quelle que soit la requête.
            Bon j'ai construit un scénario simple :
            Voilà les données du problème :

            Versions : MySQL5.1/PHP5.3.6

            ===============
            Le code PHP :
            ==============
            <?php
            $filename = 'commandes.csv';
            $monfichier = fopen($filename, 'w');
            $bdd = new PDO('mysql:host=hostname;dbname=dbname', 'username', 'password');
            $requete = 'SELECT * FROM ps_product_sale; ';
            $titres = array();
            $reponse = $bdd->query($requete);
            while ($ligne = $reponse->fetch()) {
            	if (empty($titres)) { 
            	    $titres = array_keys($ligne); // récupère les noms de colonne
            	    fputcsv($monfichier, $titres, ';');
            	}
            	fputcsv($monfichier, $ligne, ';') ;
                }
            }
            $reponse->closeCursor(); 
            ?>
            

            ==============================
            Le résultat obtenu avec ce code :
            ==============================
            id_product;0;quantity;1;sale_nbr;2;date_upd;3 
            10;10;4;4;4;4;2011-07-22;2011-07-22 
            15;15;4;4;4;4;2011-07-22;2011-07-22 
            16;16;4;4;4;4;2011-07-22;2011-07-22 
            18;18;4;4;2;2;2011-07-22;2011-07-22


            ======================================================================
            Le résultat obtenu avec myphpadmin et que je m'attendrais à obtenir de mon code:
            ======================================================================
            "id_product";"quantity";"sale_nbr";"date_upd" 
            "10";"4";"4";"2011-07-22" 
            "15";"4";"4";"2011-07-22" 
            "16";"4";"4";"2011-07-22" 
            "18";"4";"2";"2011-07-22"


            ===================
            Le show create table :
            ===================
            CREATE TABLE `ps_product_sale` (
             `id_product` int(10) unsigned NOT NULL,
             `quantity` int(10) unsigned NOT NULL default '0',
             `sale_nbr` int(10) unsigned NOT NULL default '0',
             `date_upd` date NOT NULL,
             PRIMARY KEY  (`id_product`)
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8
            



            ===================
            Les inserts de test :
            ===================
            INSERT INTO 'ps_product_sale' ( `id_product`, `quantity` , `sale_nbr`, `date_upd`)
            VALUES  ("10","4","4","2011-07-22");
            VALUES  ("15","4","4","2011-07-22");
            


            • Partager sur Facebook
            • Partager sur Twitter
              25 juillet 2011 à 10:54:51

              Bah pour moi c'est un problème php.
              Fais un print_r de ton tableau voir ce qu'il contient.
              Essaye avec PDO::FETCH_ASSOC ou PDO::FETCH_OBJ comme option de ton fetch

              while ($ligne = $resultats->fetch(PDO::FETCH_OBJ)){
              


              ou

              $resultats->setFetchMode(PDO::FETCH_OBJ);
              while ($ligne = $resultats->fetch())
              
              • Partager sur Facebook
              • Partager sur Twitter
                25 juillet 2011 à 10:59:31

                Hop c'est bon ça fonctionne en utilisant les fonctions mysql_* que je ne connaissais pas.
                Ca fonctionne aussi avec l'option PDO::FETCH_ASSOC.
                Youpi ! Merci !!
                • Partager sur Facebook
                • Partager sur Twitter
                  25 juillet 2011 à 11:06:35

                  De rien :)
                  A priori les fonctions mysql_* sont dépassées donc je te conseille plutôt la PDO.
                  Et si jamais ta besoin de faire plus de quelques fetch je te conseille de définir le mode de fetch au niveau de la connection
                  (je le met parce que je viens de le découvrir donc si ca peut servir à d'autre..) :

                  <?php
                  $bdd = new PDO('mysql:host=hostname;dbname=dbname', 'username', 'password');
                  $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);
                  ?>
                  
                  • Partager sur Facebook
                  • Partager sur Twitter

                  [MySQL] colonnes dupliquées

                  × 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