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

Langage PHP Discussion :

Données PDO reçues en double dans un output CSV


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Mai 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur après-vente
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2011
    Messages : 33
    Par défaut Données PDO reçues en double dans un output CSV
    Bonjour à tous !

    Je n'arrive pas à comprendre pourquoi ma requette m'envoie le résultat en double dans mon fichier CSV, mais je dois être fatigué

    Voici la bestiole :
    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
     
    // on cree le fichier d'output
    $output = fopen('php://output', 'w', ';');
     
    // on attaque la première ligne pour faire les colonnes
    fputcsv($output, array('ID', 'reference', 'ID_Customer', 'ID_SEPA', 'VALIDE', 'Date', 'Client', 'Mail', 'payment', 'Facture', 'Statut', 'Total HT', 'Port HT', 'COMMISSION'));
     
    //on choppe les données SQL en faisant un petit calcul au passage
    $requete = $bdd->query("SELECT SQL_CALC_FOUND_ROWS
                a.id_order AS ID, reference, c.id_customer AS ID_Customer, sepa.id_sepa AS ID_SEPA , sepa.etat AS VALIDE ,a.date_add AS Date, CONCAT(c.firstname, '  ', c.lastname) AS Client, c.email AS Mail, payment, a.invoice_number AS Facture, osl.name AS Statut, REPLACE(total_paid_tax_excl, '.', ',') AS Total_HT, REPLACE(total_shipping_tax_excl, '.', ',') AS Port_HT, REPLACE(0.15*(total_paid_tax_excl - total_shipping_tax_excl), '.', ',') AS COMMISSION  
                FROM ps_orders a 
                            LEFT JOIN ps_customer c ON (c.id_customer = a.id_customer) 
                    LEFT JOIN ps_order_state os ON (os.id_order_state = a.current_state) 
                    LEFT JOIN ps_order_state_lang osl ON (os.id_order_state = osl.id_order_state AND osl.id_lang = 1) 
                    LEFT JOIN ps_prelevementsepa sepa ON (sepa.id_customer = a.id_customer) 
                    LEFT JOIN ps_portfolio_customer_employee com ON (c.id_customer = com.id_customer) 
                    LEFT JOIN ps_employee emp ON (emp.id_employee = com.id_employee)
                    LEFT JOIN ps_shop shop ON a.id_shop = shop.id_shop 
                    WHERE 1 AND a.id_shop IN (2) AND a.date_add > '2021/01/01' AND com.id_employee = '$comm'
            ORDER BY a.id_order asc");
     
    // et on boucle le tout pour le sortir dans le fichier CSV
     
    while ($donnees = $requete->fetch())
    {
            fputcsv($output, $donnees);
    }
    $requete->closeCursor(); // Termine le traitement de la requête
    Mon problème, c'est que ma première ligne est bonne (avec les headers de chaque colonne) mais ensuite, il me met tout en double : ID,ID, reference, reference, etc etc...

    J'ai foiré mon truc à quel endroit ?
    (pour info, j'ai simplement transformé un vieux fichier qui utilisait des mysqli_ pour le moderniser en PDO)

    Merci d'avance pour vos yeux de lynx.

    Manu

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur après-vente
    Inscrit en
    Mai 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur après-vente
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2011
    Messages : 33
    Par défaut
    Problème auto-résolu en mode RTFM (Read The Fucking Manual ) : il suffit de mettre fetch(PDO::FETCH_ASSOC) et on est parfait.

    Du coup, je m'auto-congratule et je m'auto-résoud le post (et je m'auto-sors )

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

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 370
    Billets dans le blog
    17
    Par défaut
    Pour info, c'est un paramètre que tu peux mettre une fois pour toute dans les options du constructeur PDO.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $options = [PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC];
    $pdo = new PDO($dsn, $user, $password, $options);
    => https://www.php.net/manual/fr/pdo.setattribute.php

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

Discussions similaires

  1. Exporter des QList<double> dans un fichier CSV
    Par YannGTT dans le forum Débuter
    Réponses: 7
    Dernier message: 22/04/2020, 22h10
  2. Réponses: 1
    Dernier message: 21/03/2019, 10h07
  3. [MySQL] php -> SQL valeurs en double dans un export CSV ?
    Par jfab66 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/03/2017, 10h47
  4. comment rechercher données en double dans une bd ?
    Par delavega dans le forum Langage SQL
    Réponses: 4
    Dernier message: 09/02/2009, 19h39
  5. Réponses: 5
    Dernier message: 06/02/2007, 14h46

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