Je cherche à sélectionner une table définie dans une variable
Malgrès plusieurs essais et recherches, je n'arrive pas à la solution de mon erreure.

     $ID_MISSION = $_POST["ID_MISSION"].$_POST['prospects'];

            $sql = $bdd->prepare("SELECT * FROM :ID_MISSION "); 

            $sql->bindValue(':ID_MISSION', $ID_MISSION, PDO::PARAM_STR);
             $sql->execute(array($ID_MISSION));
          while( $result = $sql->fetch());
            if($result)
             {
             //Exemple 2 : J'ai tenté aussi ceci 
             $ID_MISSION = $_POST["ID_MISSION"].$_POST['prospects'];

            $sql = $bdd->prepare("SELECT * FROM ?"); 
             $sql->execute(array($ID_MISSION));
          while( $result = $sql->fetch());
            if($result)
             {

Ce que je veux

Décrivez ce que vous cherchez à obtenir.

Ce que j'obtiens

Exemple 1 : Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in

Exemple 2 : Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near

14 réponses


mikadoo
Auteur
Réponse acceptée

Bonjour à tous merci de m'avoir porter votre soutiens.
Du coup cela fonctionne avec cette solution. ".$MA_VARIABLE."

    $ID_MISSION = $_POST["ID_MISSION"].$_POST['prospects'];

var_dump($ID_MISSION);

$sql = $bdd->prepare ("SELECT * FROM ".$ID_MISSION."");
$sql->execute(array($ID_MISSION));
while( $result = $sql->fetch());
if($result)
{

Bonjour,

Il n'est pas possible d'utiliser les méthodes PDO pour faire appel à une table en dynamique. Ni le bindValue ni le execute(array()) ne répondra à ta problématique.

La seule solution : Concaténer le PHP, à l'ancienne.

$ID_MISSION = $_POST["ID_MISSION"].$_POST['prospects'];
$sql = $bdd->prepare("SELECT * FROM " . $ID_MISSION); 

Rien ne t'empêchera évidemment d'utiliser bindValue au besoin :

$ID_MISSION = $_POST["ID_MISSION"].$_POST['prospects'];
$sql = $bdd->prepare("SELECT * FROM " . $ID_MISSION . " WHERE name = :name"); 
$sql->bindValue(':name', $name, PDO::PARAM_STR);
mikadoo
Auteur

Bonjour Azorg, merci pour ton retour.
Je viens de m'essayer avec ceci
$ID_MISSION = $_POST["ID_MISSION"].$_POST['prospects'];
$sql = $bdd->prepare("SELECT * FROM " . $ID_MISSION);
$sql->execute(array($ID_MISSION));
while( $result = $sql->fetch());
if($result)
{

J'ai une erreur Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation
J'ai beau fouiller un peu partout, je ne vois pas de possibilité pour moi.

Pour le coup je te conseillerai de repartir de rien. Tu as des traces dans le code (un execute avec un ID MISSION en paramètre par exemple qui ne sert plus ici) de tes précédents tests.

N'oublie pas de passer le sujet en résolu.

mikadoo
Auteur

Je viens de lire et relire mais je ne comprends pas ce que tu tente de m'expliquer.

Bonjour,
Attention quand même aux injections sql avec "$_POST"
que donne un var_dump("$ID_MISION"); juste avant la requête ?

mikadoo
Auteur

Bonjour Carouge10 le var_dump("$ID_MISSION") me donne bien le nom de la table string(26) "52ici ma nouvelle missions"

il va falloir l'entourer de " car pas d'espace dans les nom de table
c'est à dire que tu as une table par mission ?

mikadoo
Auteur

Oui je vais avoir une table par mission
$ID_MISSION = $_POST["ID_MISSION"].$_POST['prospects'];
var_dump($ID_MISSION);

$sql = $bdd->prepare ('SELECT * FROM".$ID_MISSION."');
$sql->execute(array($ID_MISSION));
while( $result = $sql->fetch());
if($result)
{

J'ai la même erreure         

donc si tu as 1000 missions, alors 1000 tables ? wahou bonjour la maintenance si tu dois ajouter un champs
tu devrais avoir une table pour les missions avec un id pour les différenciés
il manque un espace après le from
et je dis une bêtise mais c'est pas " mais `

mikadoo
Auteur

Oui c'est l'idée de base

mikadoo
Auteur

$ID_MISSION = $_POST["ID_MISSION"].$_POST['prospects'];
var_dump($ID_MISSION);

$sql = $bdd->prepare ("SELECT * FROM ".$ID_MISSION.'');
$sql->execute(array($ID_MISSION));
while( $result = $sql->fetch());
if($result)
{

         J'ai le même souci

et je dis une bêtise mais c'est pas " mais `

c'est juste une rustine et pas une solution à long terme.
passe ton sujet en résolu. merci