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 31/08/2011, 11h26   #1
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 994
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 994
Points : 5 787
Points : 5 787
Envoyer un message via Skype™ à jreaux62
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 :
Citation:
le nom d'une table ne peut faire l'objet d'un paramètre.
on oublie donc (?)
Code :
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 :
	$query = "SELECT blabla FROM ".$T_TABLE.";";
- mysql_real_escape_string() est-il encore valable ou non (?)
- htmlspecialchars() (?)

Merci.
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 13h04   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 032
Points : 5 032
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 :
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.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 13h19   #3
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 994
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 994
Points : 5 787
Points : 5 787
Envoyer un message via Skype™ à jreaux62
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 ?
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 14h06   #4
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 032
Points : 5 032
Code :
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.)

Citation:
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.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/08/2011, 14h15   #5
Modérateur
 
Inscription : septembre 2010
Messages : 7 131
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 131
Points : 8 491
Points : 8 491
de toute façon les c'est pas possible de faire une requête préparé avec la table en paramètre
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



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


 
 
 
 
Partenaires

Hébergement Web