Précédent   Forum du club des développeurs et IT Pro > 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
 
Outils de la discussion
Publicité
'
Vieux 25/10/2012, 22h19   #1
tomix
Membre du Club
 
Avatar de tomix
 
Homme Thomas Gottvalles
Bidouilleur
Inscription : janvier 2008
Messages : 50
Détails du profil
Informations personnelles :
Nom : Homme Thomas Gottvalles
Âge : 32
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Bidouilleur
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : janvier 2008
Messages : 50
Points : 55
Points : 55
Envoyer un message via Skype™ à tomix
Par défaut Variable et nom de colonne

Bonsoir,

J'essaye d'apprendre la POO PHP et PDO tant qu'à faire. J'ai un petit soucis avec ce dernier pour sélectionner les valeurs d'une table avec la clause WHERE.

C'est pas possible de faire une requête du style :

Code :
1
2
 
SELECT * FROM table WHERE $colonne = $valeur
J'ai essayé avec les requêtes préparées mais d'après la doc, impossible de mettre la variable $colonne pour sélectionner mes valeurs. Je comprend rien.

Merci de m'aider
tomix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2012, 22h29   #2
tomix
Membre du Club
 
Avatar de tomix
 
Homme Thomas Gottvalles
Bidouilleur
Inscription : janvier 2008
Messages : 50
Détails du profil
Informations personnelles :
Nom : Homme Thomas Gottvalles
Âge : 32
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Bidouilleur
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : janvier 2008
Messages : 50
Points : 55
Points : 55
Envoyer un message via Skype™ à tomix
J'ai essayé comme ça aussi avec une requête simple mais sans succès
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
public function lister($colonne, $valeur)
{
	$billets = array();
 
       	$requete = $this->_baseDonnees->query('SELECT id, titre, corps, categorie, date, mois, commentaire, image FROM billets WHERE'  . $colonne . ' = ' . $valeur);
 
       	while ($donnees = $requete->fetch(PDO::FETCH_ASSOC))
  	{
       	         $billets[] = new Billet($donnees);
  	}
 
        return $billets;
}
tomix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2012, 09h29   #3
Fench
Expert Confirmé
 
Avatar de Fench
 
Homme
Chercheur en informatique
Inscription : mai 2002
Messages : 2 346
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Groenland

Informations professionnelles :
Activité : Chercheur en informatique
Secteur : Administration - Collectivité locale

Informations forums :
Inscription : mai 2002
Messages : 2 346
Points : 3 231
Points : 3 231
Bonjour,

Sur les requêtes dynamique tu as:
Citation:
Seules des valeurs peuvent faire l'objet de paramètres. Les noms SQL (colonnes, tables, bases, etc) ou mot-clés (asc/desc) en sont exclus. D'autant qu'ils se verraient ajoutés des quotes et on s'éloigne quelque peu de leur principe ...

Donc, non, impossible de dynamiser ces parties de requêtes avec une requête préparée (il faut le faire avant la préparation ou avec une requête non préparée). (à se demander si des requêtes préparées sont ici utiles par ailleurs)
Tu es donc obligé de faire avant le prepare dans ce cas comme par exemple:

Code :
1
2
3
4
5
6
 
$colonne = '...';
$valeur = '....';
$req = 'SELECT * FROM table WHERE '.$colonne.' = '.$valeur;
$sql = $DB->prepare($sql);
$sql->execute();
__________________
Meuuh en AI à l'INRA
Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)
Fench est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2012, 14h42   #4
LeGilou
Membre éprouvé
 
Avatar de LeGilou
 
Inscription : octobre 2008
Messages : 454
Détails du profil
Informations personnelles :
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : octobre 2008
Messages : 454
Points : 454
Points : 454
Salut,

En complément de ce que dit Fench, tu peux utiliser les requêtes préparées de cette manière :

Code :
1
2
3
4
5
6
7
8
 
$colonne = '...';
$valeur = '....';
 
$req = "SELECT * FROM table WHERE ".$colonne." = :valeur";
$sql = $DB->prepare($sql);
$sql->bindValue(':valeur', $valeur, PDO::PARAM_STR); 
$sql->execute();
LeGilou est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 27/10/2012, 22h36   #5
tomix
Membre du Club
 
Avatar de tomix
 
Homme Thomas Gottvalles
Bidouilleur
Inscription : janvier 2008
Messages : 50
Détails du profil
Informations personnelles :
Nom : Homme Thomas Gottvalles
Âge : 32
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Bidouilleur
Secteur : High Tech - Multimédia et Internet

Informations forums :
Inscription : janvier 2008
Messages : 50
Points : 55
Points : 55
Envoyer un message via Skype™ à tomix
Ha merci j'ai compris
tomix est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 03h46.


 
 
 
 
Partenaires

Hébergement Web