Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PDO
PDO Forum d'entraide sur PDO (PHP Data Objects) : pilote générique de bases de données avec PHP. Avant de poster -> FAQ PDO et Cours PDO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/02/2012, 16h57   #1
Invité de passage
 
Inscription : janvier 2011
Messages : 24
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 24
Points : 4
Points : 4
Par défaut Place Holders dynamique un peu délicat.

Bonjour à tous, je reviens vers vous pour du place holder dynamique.

Soit mon code suivant :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
$sql = "INSERT INTO bonusratio (idratio, idjeu, idtypecontent, idlangue, idniveau, bonus, descBonus) VALUE ('', ?, ?, ?, ?, ?, ?)";
        $prep = $db->prepare($sql);
 
        //décut des tests pour savoir quoi inserer
        if (isset($idjeu) && $idjeu != NULL) {
            $prep->bindValue(1, $idjeu, PDO::PARAM_INT);
        } else {
            $req = "SELECT idjeu FROM jeux";
            $res = $db->query($req)->fetchALL(PDO::FETCH_ASSOC);
            $arr = array();
            foreach ($res as $value) //Création d'un tableau contenant mes id
                $arr[] = $value['idjeu'];
 
 
            //Associer les valeurs aux place holders
            for ($i = 0; $i < count($arr); $i++) {
                $prep->bindValue(1, $arr[$i], PDO::PARAM_INT);
            }
            //$prep->execute();
En gros je regarde si mes id sont passé en paramètre et différents de null.
Si c'est le cas, j'ai une valeur pour mon bindValue.

Si il est null, je dois insérer toute les possibilités, donc avec tout mes idJeu pour cette exemple.
Mais je dois tester pour tout mes id
Code :
function ajouterBonus($idjeu, $idlangue, $idtypecontent, $idniveau, $bonus, $descBonus)
En faite si vous vous voulez cette fonction insère dans ma BDD un bonus en fonction de l'idjeu, idlangue, idtypecontent, idniveau.

Exemple, je veux donner 20% de bonus au traduction faite en italien :
ajouterBonus(null,3,2,null,0.2,'Bonus de 20% pour les traductions faite en italien")

La où c'est null je dois passer tout les id de ma table, pour couvrir toutes les possibilités possible.

J'ai donc 2 questions :
1 - Ce code vous paraît-il bon ? (pas encore testé)
2 - $prep->execute(); dois-je le passer tout à la fin de ma function lorsque tout mes tableaux contenant mes id seront chargés ?

Merci.
drYouz est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/02/2012, 16h15   #2
Membre actif
 
Homme Glen Rhodes
Étudiant
Inscription : novembre 2009
Messages : 134
Détails du profil
Informations personnelles :
Nom : Homme Glen Rhodes
Âge : 24
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Étudiant
Secteur : Santé

Informations forums :
Inscription : novembre 2009
Messages : 134
Points : 166
Points : 166
Bonjour,

Ce code me parait bon mais ne fais pas ce que vous souhaitez.
Code :
1
2
3
4
5
//Associer les valeurs aux place holders
            for ($i = 0; $i < count($arr); $i++) {
                $prep->bindValue(1, $arr[$i], PDO::PARAM_INT);
            }
            //$prep->execute();
Le bindValue ne retient pas toutes les valeurs consécutives qu'on lui passe mais seulement la dernière donc le code actuel ne fera qu'une insertion pour le dernier idJeu de la base de données.
Code :
1
2
3
4
5
//Associer les valeurs aux place holders
            for ($i = 0; $i < count($arr); $i++) {
                $prep->bindValue(1, $arr[$i], PDO::PARAM_INT);
                $prep->execute();
            }
Ce code devrait permettre l'insertion pour tous les jeux de la base.
glen1789 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h14.


 
 
 
 
Partenaires

Hébergement Web