Préparation d'une requete PDO avec multiples ID

Eléphant du PHP | 428 Messages

31 janv. 2010, 15:25

Bonjour,

Je suis entrain d'essayer de faire une automatisation pour préparer une requete type PDO.
En effet, je dispose d'un champ dans ma base ou sont stockées de multiples id séparés par des virgules et j'aimerai pouvoir traiter cette chaine pour la faire fonctionner en requete PDO préparées.

Code pour les point ? de la requete
$authorized_id = 1,2,3,4,5,6
$authorized_list = explode(','  , $authorized_id);
$point = array_values(array_fill(0, count($authorized_list), '?'));

// ce qui donne pour la première partie de la requête :
WHERE $CfgTableMain.gallery_id IN ($point)
Ce code n'est malheureusement pas fonctionnel car "$point" est un array et la requete requiert un fonctionnement comme ceci :
WHERE $CfgTableMain.gallery_id IN ($point[0],$point[1],$point[2],...)
Ma première question est de savoir comment je dois m'y prendre pour créer une variable (pas un array) automatisée par rapport aux données pour que ma requête se présente toujours de la manière : WHERE $CfgTableMain.gallery_id IN ($variable) *

* variable étant sous la forme : $variable = $point[0],$point[1],$point[2], ...

J'ai essayé pas mal de choses dont foreach, for, ... avec un count($authorized_list) mais sans résultats probants.

Car ==> je dois pouvoir faire : $variable = $point[$i].','; dans une boucle MAIS le dernier item de l'array "$point" ne doit pas contenir de virgule.

Vous me suivez ?

Ensuite viens le problème de l'éxécution de la requête. En effet, une requête PDO préparée exécute, dans un array, les données. Exemple :
$req_main->execute(array($authorized_list[0],$authorized_list[1],$authorized_list[2]));
Ma seconde question est de savoir comment faire une automatisation un peu comme pour les ? de la requête pour pouvoir afficher mes résultats dynamiquement dans l'array de l'exécution de la requête... du style :
$req_main->execute($authorized_list);

J'ai vraiment besoin de votre aide.
Je ne peux pas faire autrement que de mettre de multiples chiffres dans un champ pour cette partie de mon site.

Merci pour tous vos renseignements,
raph

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

31 janv. 2010, 15:34

Tu peux soit construire la chaine en concaténant tes valeurs et en les séparants par des virgules, soit, puisque tu disposes d'un tableau de valeurs, te pencher sur la fonction implode() qui devrait correspondre à ton besoin :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 428 Messages

31 janv. 2010, 15:46

Merci Ryle pour ta réponse ça m'a aidé pour la partie conception de la requete avec les point d'interrogation (?).
$point1 = array_values(array_fill(0, count($authorized_list), '?'));
$point = implode(",", $point1);

WHERE $CfgTableMain.gallery_id IN ($point)
C'est quand même plus simple avec implode que for ou foreach ^^ merci

Toutefois concernant la partie plus difficile qui est l'exécution de la requête, je requiert encore une fois votre aide ...

En effet, la requete à l'éxécution oblige le fonctionnement dans un array... exemple :
$req_main->execute(array($authorized_list[0],$authorized_list[1],$authorized_list[2]));
Comment dois-je procéder pour faire une automatisation un peu comme les points d'interrogation plus haut ?

Merci,
raph

ViPHP
ViPHP | 5462 Messages

31 janv. 2010, 15:54

$req_main->execute($authorized_list);

Eléphant du PHP | 428 Messages

31 janv. 2010, 16:02

Merci les gars, franchement, c'est cool

Eléphant du PHP | 428 Messages

31 janv. 2010, 16:08

Une dernière question : peux t'on mixer des variables PDO "?" et ":variable" en une seule requête ?

Mammouth du PHP | 2937 Messages

31 janv. 2010, 16:11

Une dernière question : peux t'on mixer des variables PDO "?" et ":variable" en une seule requête ?
Non, je ne pense pas.

ViPHP
AB
ViPHP | 5818 Messages

31 janv. 2010, 17:07


Eléphant du PHP | 428 Messages

31 janv. 2010, 19:07

Bonsoir,

Merci pour vos réponses c'est cool ;)

J'ai une ultime question à vous poser : J'ai, parmis toutes mes requetes PDO, certaine comportant plus d'une variable dans la condition WHERE.
Comment puis-je imbriquer ces variables dans mon exécution PDO en plus de la variable (array) "authorized_list" ?
// Authorized_list  = array ([0] => 1, [1] => 2, [2] => 3)
$req_main->execute($authorized_list);

// Ce qui doit être imbriqué en plus que authorized list dans la requete ci dessus :
$place = $_GET['place'];
WHERE ... AND $CfgTableMain.gallery_place = ? // $place
Comment faire pour imbriquer $place en plus de $authorized_list dans la requete preparée => sachant que authorized_list est une variable contenant déjà un tableau (array) ?

Si je modifie le tableau authorized_list pour y imbriquer la valeur de $place, la requête refusera de fonctionner (je partage ma requete avec d'autres utilisateurs avec d'autres droits et elle ne fonctionnera pas si je modifie authorized_list).

Est-ce possible et comment ?

Merci,
raph

ViPHP
ViPHP | 5462 Messages

31 janv. 2010, 19:13

array_merge ou +
$data = array_merge($array1, $array2);
//ou
$data = $array1 + $array2;