par
visualight » 15 févr. 2010, 16:33
Bonjour,
Voici que je rencontre encore un problème et celui-ci concerne la fonction ARRAY_PUSH(); qui a un comportement bizzare.
En effet, lorsque je désire rajouter un élément à mon array (via array_push) il me rajoute non pas 1 élément MAIS 2 fois le même !
Exemple de la partie de mon code :
// $auth_id est un array venant du champ gallery_auth_id de ma table
// le champ gallery_auth_id est une zone texte ou sont regroupées des ID séparées par des virgules
$auth_id = explode(",", $res_main['gallery_auth_id']);
// Je mappe le tableau $auth_id pour le refondre en séparant les valeurs par des virgules
$map = array_map(null, $auth_id);
$authorized_id_mapping = join(',', $map);
// Je crée un array et je sépare les éléments des virgules. Chaque ID de l'array est maintenant un élément.
$authorized_list = explode(',' , $authorized_id_mapping);
// PLUS LOIN DANS LE SCRIPT : je fais un array_push de l'élément $date pour le refondre dans l'array $authorized_list
// Je fais un array_push car j'ai des conditions IF différentes pour la requete de filtrage par DATE et la requete de filtrage par LIEUX
$date = $_POST['date'];
array_push ($authorized_list, $date);
// J'exécute maintenant la requête PDO préparée
$req_main = $connexion->prepare ("SELECT $CfgTableMain.gallery_id, $CfgTableMain.gallery_private, $CfgTableMain.gallery_date, $CfgTableMain.gallery_title, $CfgTableMain.gallery_int_title, $CfgTableMain.gallery_count, $CfgTableMain.gallery_photo_active, $CfgTableMain.gallery_video_active, $CfgTableMain.photo_localhost, $CfgTableObjects.object_type, $CfgTableObjects.object_filename
FROM $CfgTableMain RIGHT JOIN $CfgTableObjects ON ($CfgTableMain.gallery_id = $CfgTableObjects.gallery_id)
WHERE $CfgTableMain.gallery_id IN ($point) AND YEAR ($CfgTableMain.gallery_date) = ? GROUP BY $CfgTableMain.gallery_id ORDER BY $CfgTableMain.gallery_date DESC $max");
$req_main->execute($authorized_list);
RESULTAT : Erreur PDO !
Warning: PDOStatement::execute() [function.PDOStatement-execute]: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in ...
==> Quand je fais un
print_r de l'array
$authorized_list, je vois que l'array_push à bien mis la valeur $date MAIS elle l'a mis 2 fois !!
Exemple
print_r($authorized_list); ==> Donne :
Code : Tout sélectionner
Array ( [0] => 2 [1] => 3 [2] => 4 [3] => 5 [4] => 6 [5] => 7 [6] => 8 [7] => 9 [8] => 10 [9] => 11 [10] => 12 [11] => 13 [12] => 14 [13] => 15 [14] => 16 [15] => 17 [16] => 18 [17] => 19 [18] => 20 [19] => 21 [20] => 22 [21] => 23 [22] => 31 [23] => 32 [24] => 33 [25] => 34 [26] => 35 [27] => 36 [28] => 37 [29] => 2010 [30] => 2010 )
Vous pouvez donc remarquer que l'année 2010 apparaît 2 fois à la fin du tableau.
Avez-vous une idée d'où cela pourrait provenir sachant que je ne fais aucunes boucles dans mon code (
pas de WHILE ou FOR ou FOREACH) ?
Merci pour votre aide, je sèche ...
Raph
Bonjour,
Voici que je rencontre encore un problème et celui-ci concerne la fonction ARRAY_PUSH(); qui a un comportement bizzare.
En effet, lorsque je désire rajouter un élément à mon array (via array_push) il me rajoute non pas 1 élément MAIS 2 fois le même !
[u]Exemple de la partie de mon code : [/u]
[php]// $auth_id est un array venant du champ gallery_auth_id de ma table
// le champ gallery_auth_id est une zone texte ou sont regroupées des ID séparées par des virgules
$auth_id = explode(",", $res_main['gallery_auth_id']);
// Je mappe le tableau $auth_id pour le refondre en séparant les valeurs par des virgules
$map = array_map(null, $auth_id);
$authorized_id_mapping = join(',', $map);
// Je crée un array et je sépare les éléments des virgules. Chaque ID de l'array est maintenant un élément.
$authorized_list = explode(',' , $authorized_id_mapping);
// PLUS LOIN DANS LE SCRIPT : je fais un array_push de l'élément $date pour le refondre dans l'array $authorized_list
// Je fais un array_push car j'ai des conditions IF différentes pour la requete de filtrage par DATE et la requete de filtrage par LIEUX
$date = $_POST['date'];
array_push ($authorized_list, $date);
// J'exécute maintenant la requête PDO préparée
$req_main = $connexion->prepare ("SELECT $CfgTableMain.gallery_id, $CfgTableMain.gallery_private, $CfgTableMain.gallery_date, $CfgTableMain.gallery_title, $CfgTableMain.gallery_int_title, $CfgTableMain.gallery_count, $CfgTableMain.gallery_photo_active, $CfgTableMain.gallery_video_active, $CfgTableMain.photo_localhost, $CfgTableObjects.object_type, $CfgTableObjects.object_filename
FROM $CfgTableMain RIGHT JOIN $CfgTableObjects ON ($CfgTableMain.gallery_id = $CfgTableObjects.gallery_id)
WHERE $CfgTableMain.gallery_id IN ($point) AND YEAR ($CfgTableMain.gallery_date) = ? GROUP BY $CfgTableMain.gallery_id ORDER BY $CfgTableMain.gallery_date DESC $max");
$req_main->execute($authorized_list);[/php]
[b]RESULTAT : [/b] Erreur PDO !
Warning: PDOStatement::execute() [function.PDOStatement-execute]: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in ...
==> Quand je fais un [b]print_r[/b] de l'array [b]$authorized_list[/b], je vois que l'array_push à bien mis la valeur $date MAIS elle l'a mis 2 fois !!
Exemple [b]print_r($authorized_list);[/b] ==> Donne :
[code]Array ( [0] => 2 [1] => 3 [2] => 4 [3] => 5 [4] => 6 [5] => 7 [6] => 8 [7] => 9 [8] => 10 [9] => 11 [10] => 12 [11] => 13 [12] => 14 [13] => 15 [14] => 16 [15] => 17 [16] => 18 [17] => 19 [18] => 20 [19] => 21 [20] => 22 [21] => 23 [22] => 31 [23] => 32 [24] => 33 [25] => 34 [26] => 35 [27] => 36 [28] => 37 [29] => 2010 [30] => 2010 ) [/code]
Vous pouvez donc remarquer que l'année 2010 apparaît 2 fois à la fin du tableau.
Avez-vous une idée d'où cela pourrait provenir sachant que je ne fais aucunes boucles dans mon code ([b]pas[/b] de WHILE ou FOR ou FOREACH) ?
Merci pour votre aide, je sèche ...
Raph