Bonjour,
Voici ma requête
$query = $db->prepare("SELECT id FROM FOLDER WHERE id_folder=:id_folder");
while ($searchFolder != null) {
$query->bindParam(':id_folder', $searchFolder);
$query->execute();
$searchFolderTarget = $query->fetch();
$itemToRename[] = $searchFolderTarget;
$searchFolder = $searchFolderTarget["id"];
}Le problème c'est que si ya plusieurs id avec le meme id_folder il en prend qu'un et du coup je perds les autres.
Moi je veux tous les prendre et remonter jusqu’à la racine dans tous les cas pour avoir tout au complet.
Savez vous comment faire ?
Merci
fetchAll()
J'ai tenté mais ça renvoie du vide et ça permet pas de partir dans plusieurs direction
Tu pourrais filer un dump sql avec les colonnes "id" et "id_folder" stp ? Histoire de faire des tests.
test ta requête sur phpmyadmin déjà
…et sans faire de test, une solution naïve (peut-être fonctionnelle) :
<?php
function fooBar(PDOStatement $query, $searchFolder, array &$itemsToRename = null) {
if (null === $itemsToRename) {
$itemsToRename = [];
}
$query->bindParam(':id_folder', $searchFolder);
$query->execute();
$results = $query->fetchAll();
foreach ($results as $result) {
$itemsToRename[] = $result;
fooBar($query, $result['id'], $itemsToRename);
}
return $itemsToRename;
}
$query = $db->prepare('SELECT id FROM FOLDER WHERE id_folder=:id_folder');
$searchFolder = ????;
$itemsToRename = fooBar($query, $searchFolder);
Le 07 août 2018 à 14:36:12 deepblue a écrit :
Tu pourrais filer un dump sql avec les colonnes "id" et "id_folder" stp ? Histoire de faire des tests.
Oui bien sur tient : http://www.sendbox.fr/6c34e5ed3cb553a1/folder.sql
Merci.
https://gist.deblan.org/en/view/5b69c482d05bd/72670da989f5a86602f92f1beb4fe005808f21d5 affiche https://gist.deblan.org/en/view/5b69c497f2f08/b1b880c3663e4f6e345569effacf3e99e7172224
Hum du coup si je vois bien c'est fonctionnel ? Si oui, merci.
Par contre je vois pas trop comment les valeurs sont sauvegardés pour aller dans toutes les directions.
Sauf erreur d'interprétation, j'ai répliqué ce que tu voulais faire dans ton premier post.
Il y a plusieurs choses à comprendre dans ce bout de code. La première est l'ensemble des paramètres qui prend la fonction "fooBar" :
Avant d'aller plus loin, essaye de comprendre ce comportement :
- Code : https://gist.deblan.org/en/view/5b6a9a4b36c89/93347e62bca01e4844671f8a19a9117a9f1839f0
- Résultat : https://gist.deblan.org/en/view/5b6a9a64019e2/f2af705b8a40d85fe2d462ceed6e0d2ce5cfd290
Et celui ci :
- Code : https://gist.deblan.org/en/view/5b6a9a4b36c89/7a132f26211bb9c0e64d719fff547cdb31e4c02f
- Résultat : https://gist.deblan.org/en/view/5b6a9a64019e2/8c3811f4d4491b759c90b5041ef91ccc4a450e07
Tu remarques que la fonction "fooBar" s'appelle elle-même. Si tu comprends les 2 comportements précédents, tu comprendras comment mon code (semble) résoudre ton problème.
Le 08 août 2018 à 09:32:19 deepblue a écrit :
Sauf erreur d'interprétation, j'ai répliqué ce que tu voulais faire dans ton premier post.Il y a plusieurs choses à comprendre dans ce bout de code. La première est l'ensemble des paramètres qui prend la fonction "fooBar" :
- Une requête préparée
- Une valeur de "id_folder"
- Un tableau qui, par sa définition dans la signature de la fonction, sera modifiable. Ce paramètre peut ne pas être saisi
Avant d'aller plus loin, essaye de comprendre ce comportement :
- Code : https://gist.deblan.org/en/view/5b6a9a4b36c89/93347e62bca01e4844671f8a19a9117a9f1839f0
- Résultat : https://gist.deblan.org/en/view/5b6a9a64019e2/f2af705b8a40d85fe2d462ceed6e0d2ce5cfd290Et celui ci :
- Code : https://gist.deblan.org/en/view/5b6a9a4b36c89/7a132f26211bb9c0e64d719fff547cdb31e4c02f
- Résultat : https://gist.deblan.org/en/view/5b6a9a64019e2/8c3811f4d4491b759c90b5041ef91ccc4a450e07Tu remarques que la fonction "fooBar" s'appelle elle-même. Si tu comprends les 2 comportements précédents, tu comprendras comment mon code (semble) résoudre ton problème.
pas besoins de faire une fonction récursive pour récupérer toutes enregistrement qui on id_folder identique !!!!!
Le 07 août 2018 à 13:52:10 Lolopy a écrit :
J'ai tenté mais ça renvoie du vide et ça permet pas de partir dans plusieurs direction
si $query->fetch() retourne quelque chose, étonnant que $query->fetchAll() ne retourne rien ![]()
20_cent_2017, ça tombe bien, ce n'est pas ce que fait le code
(!!!!!)
Le 08 août 2018 à 13:55:41 deepblue a écrit :
20_cent_2017, ça tombe bien, ce n'est pas ce que fait le code(!!!!!)
@Deepblue, je te présente 20_cent_2017, qui n'y comprends jamais rien mais qui la ramène sur tous les sujets. Désespérant ![]()
Le 08 août 2018 à 12:49:38 tirealatete a écrit :
Le 07 août 2018 à 13:52:10 Lolopy a écrit :
J'ai tenté mais ça renvoie du vide et ça permet pas de partir dans plusieurs directionsi $query->fetch() retourne quelque chose, étonnant que $query->fetchAll() ne retourne rien
Ben oui mais des fois y a de bugs on comprends pas.
deepblue merci je vais voir et je reviendrais te dire mais a première vu tu as juste rajouté & dans ton code chose que je ne connais pas.
@Lolopy http://php.net/manual/fr/functions.arguments.php#functions.arguments.by-reference
@thymotep ah ben… ![]()
Joli troll !!!
Le code marche bien...
affiche les erreurs ;)
FOLDER n'est pas folder !
Merci au troll j'ai perduis une heure de mon temps pour ça !
PS: par contre je vois pas le rapport avec les fonction récursive et ta solution au vu de ton explication.
Pardon?
20_cent_2017, la casse dépend de l'OS et l'op doit tourner sous windows donc FOLDER == folder == FOLder dans son système de fichier. Une fonction qui s'appelle elle-même, c'est ce qu'on appelle la récursivité.
Lolopy, effectivement, le "&" dans la déclaration d'un paramètre d'une fonction permet de modifier le contenu de la variable lors de l'appel et ce, en dehors de la fonction (cf les 2 exemples où le var_dump met en évidence que $fruits [déclaré à l'extérieur de la fonction] est bien modifié ou pas par la fonction). Dans mon code, fooBar() appelle elle même fooBar() en déclarant au préalable $itemsToRename s'il n'est pas renseigné en paramètre. J'aurais aussi pu faire ça :
$searchFolder = 77;
$itemsToRename = [];
fooBar($query, $searchFolder, $itemsToRename);
var_dump($itemsToRename);
...mais c'est mois joli je trouve.
J’ai vue null part qu’il était sous Windows