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 14/12/2010, 13h29   #1
Membre du Club
 
Inscription : mai 2009
Messages : 234
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 234
Points : 53
Points : 53
Par défaut While en PDO pour un tableau

Bonjour,

J'ai dut mal (très mal) cherché, mais en désespoir de cause je viens ici. Comment fais-t-on en PDO (php :p) pour effectuer une action "ligne par ligne" via une boucle while ???

J'ai trouvé une trentaines de réponses possibles sur le net mais rien ne marche...

Voici un extrait de mon code actuel :
Code :
1
2
3
4
5
6
7
8
9
10
11
 
$cnx = $this->cnx; // je suis dans une classe, $this->cnx a été instancié à sa création avec new PDO... La connexion marche puisque les requêtes marches toutes.
$req = $cnx->prepare("SELECT * FROM ?");
$req->exec(array($where)); // Je suis dans une fonction où $where est le nom d'une table contenant les informations sur les pages d'un site. Il me faut donc (je pense) utilisé prepare() pour éviter les injections...
$req->setFetchMode(PDO::FETCH_OBJ);
while($tab = $req->fetch()){
     $this->page[$tab->id] = array(
              "title" => stripslashes($tab->title),
              "src" => stripslashes($tab->src)
     ); // page est un tableau de la classe contenant les infos de la BDD pour éviter moultes requêtes et donc diminuer les injections. 
}
Résultat : pas de tableau...

Merci d'avance pour votre aide.
__________________
Ce n'est pas parce qu'un chemin prends la direction que l'on souhaite qu'il mène où l'on veut...
Trouver des inconvénients à Micro$oft, c'est comme faire une division par zéro, c'est infini...
FotoXe33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 13h48   #2
Membre chevronné
 
Inscription : juillet 2003
Messages : 625
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 625
Points : 600
Points : 600
Bonjour,
as tu essayé avec fetchAll ?

http://www.php.net/manual/fr/pdostatement.fetchall.php
__________________
Le savoir est utile que s'il est partagé par tous.
/(bb|[^b]{2})/
!sleep() ? array((string))
syl2095 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 13h49   #3
Membre du Club
 
Inscription : mai 2009
Messages : 234
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 234
Points : 53
Points : 53
Oui, je te dis, j'ai essayer plein de chose différentes...

Comment faire si tu proposes fetchAll() ?
__________________
Ce n'est pas parce qu'un chemin prends la direction que l'on souhaite qu'il mène où l'on veut...
Trouver des inconvénients à Micro$oft, c'est comme faire une division par zéro, c'est infini...
FotoXe33 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2010, 13h57   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
L'exécution d'une requête préparée : méthode execute et non exec (d'autant qu'il ne s'agit pas des mêmes classes - PDO vs PDOStatement).
Mais le nom d'une table ne peut faire l'objet d'un paramètre.
(accessoirement avoir les erreurs - PHP, en général, comme PDO, ça peut servir)

Et PDO offre des modes/options pour faire directement ce que vous voulez (PDO::FETCH_UNIQUE voir PDO::FETCH_GROUP suivant les cas - unicité assurée ou non)

Code :
1
2
$req = $this->cnx->query("SELECT id, title, src FROM " . $where) or die(print_r($this->cnx->errorInfo(), TRUE)); // par contre, on va supposer $where correctement traité, ne sachant pas à quoi ça correspond exactement
$this->page = $req->fetchAll(PDO::FETCH_UNIQUE|PDO::FETCH_ASSOC);
julp est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/12/2010, 14h02   #5
Membre chevronné
 
Inscription : juillet 2003
Messages : 625
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 625
Points : 600
Points : 600
tu dois mettre ta table dans ta methode prepare
__________________
Le savoir est utile que s'il est partagé par tous.
/(bb|[^b]{2})/
!sleep() ? array((string))
syl2095 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/12/2010, 14h05   #6
Membre du Club
 
Inscription : mai 2009
Messages : 234
Détails du profil
Informations forums :
Inscription : mai 2009
Messages : 234
Points : 53
Points : 53
Mille merci julp! Tout simplement ! Et dire que je galérais pour rien...

Une petite question a y être, mettre un paramètre brut dans une fonction, ça craint pas niveau sécu ?

Merci en tt cas...
__________________
Ce n'est pas parce qu'un chemin prends la direction que l'on souhaite qu'il mène où l'on veut...
Trouver des inconvénients à Micro$oft, c'est comme faire une division par zéro, c'est infini...
FotoXe33 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 01h27.


 
 
 
 
Partenaires

Hébergement Web