colonnes dupliquée sur requête PDO

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : colonnes dupliquée sur requête PDO

Re: colonnes dupliquée sur requête PDO

par sachaz » 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))

Re: colonnes dupliquée sur requête PDO

par macgawel » 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

colonnes dupliquée sur requête PDO

par sachaz » 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 ...