IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Nom de table variable -> :T_TABLE ou $T_TABLE ? [PDO]


Sujet :

PHP & Base de données

  1. #1
    Invité
    Invité(e)
    Par défaut Nom de table variable -> :T_TABLE ou $T_TABLE ?
    Bonjour,
    Bon. pour mettre à jour mes tutos, je me lance dans PDO.
    J'en suis à Comprendre PDO, et déjà une question :
    -> comment faire/préparer une requête avec un nom de table en variable ?
    j'ai vu ceci :
    le nom d'une table ne peut faire l'objet d'un paramètre.
    on oublie donc (?)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	$query = "SELECT blabla FROM :T_TABLE;";
    	$query->bindValue(':T_TABLE', $TABLE_NEWS, PDO::PARAM_STR); // ca ne fonctionne pas
    -> alors comment la sécuriser si j'écris (?)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	$query = "SELECT blabla FROM ".$T_TABLE.";";
    - mysql_real_escape_string() est-il encore valable ou non (?)
    - htmlspecialchars() (?)

    Merci.

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Hello

    Vu que tu es quelqu'un d'avisé qui comprends que le nom de la table ne doit jamais provenir de l'utilisateur ni lui être exposé, tu comprendra que tu peux tout à fait utiliser une bête concaténation.

    Ce que tu dois faire c'est déterminer le nom de table à utiliser en fonction d'un paramètre reçu. Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    switch ($action) {
      case 'utilisateur': $table = '`user`'; break;
      case 'administrateur': $table = '`admin`'; break;
      ...
    }
     
    $query = "INSERT INTO {$table} ...";
    Après tu sécurise tes paramètre comme d'habitude.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Benjamin Delespierre Voir le message
    le nom de la table ne doit jamais provenir de l'utilisateur ni lui être exposé
    Mui claro !
    Pour moi, le $T_TABLE provient d'un fichier de configuration interne
    -> donc c'est bien MOI qui en définit les noms.

    Citation Envoyé par Benjamin Delespierre Voir le message
    Après tu sécurises tes paramètre comme d'habitude.
    C'est le "comme d'habitude" qui me perturbe (!)
    Et un excès de paranoïa, sans doute. Surtout depuis que Stealh35 m'a "confronté" à des failles dans mes formulaires ... (corrigées depuis)
    - htmlspecialchar() suffit-il ?

  4. #4
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Pour moi, le $T_TABLE provient d'un fichier de configuration interne
    -> donc c'est bien MOI qui en définit les noms.
    Si c'est coté serveur et que tu les contrôle tu n'a pas besoin de les vérifier / valider de surcroît. Sinon tu ne vas jamais t'en sortir si tu dois tout vérifier et tu vas introduire beaucoup de lourdeur dans ton application (rallentissement, perte de clarté du code etc.)

    C'est le "comme d'habitude" qui me perturbe (!)
    Et un excès de paranoïa, sans doute. Surtout depuis que Stealh35 m'a "confronté" à des failles dans mes formulaires ... (corrigées depuis)
    - htmlspecialchar() suffit-il ?
    La validation de données ne se cantonne pas à la conversion / suppression des balises. Le meilleur moyen de valider / nettoyer les données reste indubitablement les filtres.

  5. #5
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    de toute façon les c'est pas possible de faire une requête préparé avec la table en paramètre

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] LINQ to SQL : Nom de table variable.
    Par def_msy dans le forum C#
    Réponses: 5
    Dernier message: 07/07/2011, 16h44
  2. Requête Select sur nom de tables variables
    Par jujunior dans le forum Oracle
    Réponses: 9
    Dernier message: 13/09/2010, 19h25
  3. SSIS - Requete sql avec nom de table variable
    Par IcedLand dans le forum Développement
    Réponses: 3
    Dernier message: 03/12/2007, 11h55
  4. SSIS - Requete sql avec nom de table variable
    Par IcedLand dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 03/12/2007, 11h55
  5. Nom de table variable ?
    Par szdavid dans le forum Oracle
    Réponses: 2
    Dernier message: 10/08/2005, 10h56

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo