Bonjour à tous,

Mon problème concerne l'enregistrement et l'appel d'une requête depuis une table.

Une fois l'insert effectué, je souhaite utiliser cette requête de façon dynamique. Je m'explique :

J'enregistre dans la table 'requete' la requête suivante (dans le champ 'req') :

SELECT valeur1, valeur2, valeur3 FROM exemple WHERE societe=:param1 AND utilisateur=:param2 AND valide=:param3

Et les paramètres associés à cette requête, (dans le champ 'param'), à savoir :

SOCIETE : ID_USER : "A"

Mon idée : j'ai un modèle (un traitement) contenu dans une page PHP (traitement.php). Ce modèle ne bouge pas. Le seul élément qui diffère est ma requête (et ses paramètres associés). Cf. ci-dessus.

Je stocke donc chaque requête et ses paramètres dans une table 'requete' dont le modèle est présenté ci-suit, à savoir :

-----------------------------------------------------------------------------------------------------

Structure de la table 'requete'
------------------
id | id_user | req | param | date

Contenu de la table 'requete'
------------------
id
1
id_user
11
req
SELECT valeur1, valeur2, valeur3 FROM exemple WHERE societe=:param1 AND utilisateur=:param2 AND valide=:param3
param
SOCIETE : ID_USER : "A"
date
2015-02-25 14:39:15

-----------------------------------------------------------------------------------------------------

Voici mon code afin d'y voir plus clair :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
 
 
$ma_requete = $bdd->prepare('SELECT * FROM requete WHERE id_user= :repere');
                    $ma_requete->execute(array(
                        'repere' => $_GET['id'],
                    ));
                    $i = 0;
                    while ($donnees_ma_requete = $ma_requete->fetch()) {
 
                        $requete[$i] = $donnees_ma_requete['req'];
                        $param[$i] = $donnees_ma_requete['param'];
 
                        echo $requete[$i] . "<br>"; // affiche : SELECT valeur1, valeur2, valeur3 FROM exemple WHERE societe=:param1 AND utilisateur=:param2 AND valide=:param3
                        echo $param[$i] . "<br>"; // affiche :  'param1' => SOCIETE ,'param2' => ID_USER ,'param3' => "A",
 
                        $i++;
                    }
 
                    for ($debut = 0; $debut < 1; $debut++) {
 
                        //DEBUT LISTE PARAM
 
                        $s = $param[$debut];
                        $tab = explode(':', $s);
                        $nbre_param = count($tab);
 
                        //FIN LISTE PARAM
 
                        $liste_param[$debut] = "";
 
                        for ($debut_param = 1; $debut_param < $nbre_param + 1; $debut_param++) {
 
                            $valeur[$debut_param] = ExtractChamp($param[$debut], $debut_param, ":"); // extraction des valeurs du champ 'param' avec le séparateur ":"
                            $liste_param[$debut] .= "'param" . $debut_param . "' => $valeur[$debut_param],";
 
                        }
 
                    }
 
                        $reponse[0]->execute();
                        $reponse[0]->execute(array($liste_param[0]));
 
                        while ($result = $reponse[0]->fetch()) {
 
                             echo $result['valeur1'] . "<br>";
                             echo $result['valeur2'] . "<br>";
 
                             // ...........
 
                        }
Lorsque je lis mon enregistrement, SOCIETE, ID_USER (qui sont des constantes) ne sont pas remplacées ... et ma requête est considérée comme une "simple" chaîne.

Je suis allé voir du côté de la fonction eval() mais sans succès.

Auriez-vous une solution à m'apporter ?

Merci d'avance pour votre aide