Page 1 sur 1

colonnes dupliquée sur requête PDO

Posté : 25 juil. 2011, 10:44
par sachaz
Bonjour,

J'ai un problème tout bête j'arrive pas à voir ce qu'il se passe. J'ai cherché dans les FAQ mais je trouve rien.

Quand je passe une requête SELECT dans un script PHP, elle me retourne des colonnes dupliquées, avec pour titre un numéro partant de 0.
Si je la passe sur MyPHPadmin, ça marche normalement.

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 :
==============================

Code : Tout sélectionner

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:
======================================================================

Code : Tout sélectionner

"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");
Si quelqu'un peut m'aider à y voir clair ...

Re: colonnes dupliquée sur requête PDO

Posté : 25 juil. 2011, 11:22
par macgawel
Bonjour.
Il faut lire un peu mieux :roll:
PDO::fetch :
Récupère une ligne depuis un jeu de résultats associé à l'objet PDOStatement. Le paramètre fetch_style détermine la façon dont PDO retourne la ligne.
(...)
Contrôle comment la prochaine ligne sera retournée à l'appelant. Cette valeur doit être une des constantes PDO::FETCH_*, et par défaut, vaut PDO::FETCH_BOTH.
(...)
PDO::FETCH_BOTH (défaut): retourne un tableau indexé par les noms de colonnes et aussi par les numéros de colonnes, commençant à l'index 0, comme retournés dans le jeu de résultats

Re: colonnes dupliquée sur requête PDO

Posté : 25 juil. 2011, 11:27
par sachaz
ça fonctionne en utilisant les fonctions mysql_* que je ne connaissais pas.
Ca fonctionne aussi avec l'option PDO::FETCH_ASSOC :
while ($ligne = $reponse->fetch(PDO::FETCH_ASSOC))