colonnes dupliquée sur requête PDO

Petit nouveau ! | 2 Messages

25 juil. 2011, 10:44

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 ...

Mammouth du PHP | 672 Messages

25 juil. 2011, 11:22

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

Petit nouveau ! | 2 Messages

25 juil. 2011, 11:27

ç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))