SELECT * FROM ?

Par mikadoo, il y a 5 ans


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, il y a 5 ans

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

Carouge10, il y a 5 ans

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, il y a 5 ans

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         
Carouge10, il y a 5 ans

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, il y a 5 ans

Oui c'est l'idée de base

Azorgh, il y a 5 ans

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, il y a 5 ans

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.

Azorgh, il y a 5 ans

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, il y a 5 ans

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

Carouge10, il y a 5 ans

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

mikadoo, il y a 5 ans

$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
Carouge10, il y a 5 ans

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

mikadoo, il y a 5 ans

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)
{

Carouge10, il y a 5 ans

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