[RESOLU] Données dans tableau après un fetchAll()

Eléphant du PHP | 67 Messages

26 sept. 2017, 11:39

Bonjour,

J'arrive sans peine à récupérer des données après ma requête avec un "fetchAll()" du résultat.
Le tableau par contre me renvoie les données "en doubles":

Code : Tout sélectionner

$requete = $connexionStagiaire->query('SELECT id, nom, prenom FROM ma_table'); $result = $requete->fetchAll(); foreach($result as $key) { $insert[] = implode(', ', array_values($key)); } var_dump($insert);
Avec ceci, les chaines qui me sont renvoyées sont du type:
'id, id, nom, nom, prenom, prenom'
Or vous vous en doutez, je voudrais quelque chose comme ça:
'id, nom, prenom'

Comment faire?
Merci! :)

Mammouth du PHP | 571 Messages

26 sept. 2017, 13:24

bonjour,
il faut indiquer à PDO, avec le paramètre fetch_style , quel type de tableau sera renvoyé : tableau associatif, tableau indexé numériquement ... pour le moment tu appliques les 2 modes.

Code : Tout sélectionner

$requete = $connexionStagiaire->query('SELECT id, nom, prenom FROM ma_table'); $result = $requete->fetchAll( PDO::FETCH_ASSOC ); //tableau associatif indexé par les noms des colonnes foreach($result as $key) { $insert[] = implode(', ', array_values($key)); } var_dump($insert);
juste une parenthèse tu peux t'en passer de la boucle en utilisant une fonction de callback:

Code : Tout sélectionner

$requete = $connexionStagiaire->query('SELECT id, nom, prenom FROM ma_table'); $result = $requete->fetchAll( PDO::FETCH_ASSOC ); //tableau associatif indexé par les noms des colonnes $insert = array_map(function( $value ) use($result) { return implode(', ', $value) ; }, $result); var_dump($insert);
Après si les données ne sont recuperées, sans besoin de les afficher, que dans le but de les insérer dans une autre table tu peux faire la requête INSERT/SELECT

Code : Tout sélectionner

INSERT INTO ma_nouvelle_table( id, nom, prenom ) SELECT id, prenom, nom FROM ma_table;

Eléphant du PHP | 67 Messages

27 sept. 2017, 08:49

Pfff, pas faute d'avoir regardé la doc mais j'étais passé à côté du PDO::FETCH_ASSOC... :)

Merci beaucoup, ça marche nickel!