Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
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 19/03/2011, 15h16   #1
Candidat au titre de Membre du Club
 
Inscription : mai 2007
Messages : 35
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 35
Points : 14
Points : 14
Par défaut Requête dans foreach

Bonjour à tous,

Voilà, je m'arrache les cheveux sur une boucle dans laquelle se trouve une instruction mysql :

Code :
1
2
3
4
5
6
7
8
9
$amis = explode(",", "Dom, JM, Zaza");
foreach ( $amis as $amis ) {
# affiche les infos des amis :
mysql_select_db($database_base, $base);
$query_ami = "SELECT adresse FROM inscrits WHERE pseudo = '$amis'";
$ami = mysql_query($query_ami, $base) or die(mysql_error());
$row_ami = mysql_fetch_assoc($ami);
echo $row_ami['adresse'];
}
Il n'y a que la première valeur qui est retournée. Comme si la boucle ne répétait pas ma requête pour chaque 'ami'. En testant avec $i++ la boucle est pourtant correcte.

Snirf ! J'ai d'autres boucles du même genre qui fonctionne, je ne comprends pas.

Merci à tous
Lexarino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/03/2011, 15h34   #2
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Il faut aussi boucler sur le fetch pour ramener toutes les lignes fetch ! cf l'exemple associé à mysql-fetch-assoc
Code :
1
2
3
4
5
while ($row = mysql_fetch_assoc($result)) {
   echo $row["userid"];
   echo $row["fullname"];
   echo $row["userstatus"];
}
A moins que Dom, JM et Zaza n'aient qu'un ami ?
Mais ta logique est contre performante, il est préférable de ne faire qu'une requête:
Code :
SELECT adresse FROM inscrits WHERE pseudo IN ('Dom', 'JM', 'Zaza')
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2011, 14h44   #3
Candidat au titre de Membre du Club
 
Inscription : mai 2007
Messages : 35
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 35
Points : 14
Points : 14
Argh toujours pô !

Il doit y avoir un conflit quelque part.
Lexarino est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2011, 16h01   #4
Modérateur
 
Avatar de sabotage
 
Homme Vincent
Inscription : juillet 2005
Messages : 14 929
Détails du profil
Informations personnelles :
Nom : Homme Vincent

Informations forums :
Inscription : juillet 2005
Messages : 14 929
Points : 16 381
Points : 16 381
La proposition de skuatamad avec le IN est je dirais la seule valable.
Le requête dans des boucles sont des catastrophes de performance.
sabotage est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/03/2011, 16h49   #5
Membre confirmé
 
Homme Benjamin
Consultant informatique
Inscription : août 2007
Messages : 160
Détails du profil
Informations personnelles :
Nom : Homme Benjamin
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Consultant informatique
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2007
Messages : 160
Points : 248
Points : 248
Je plussoie les autres membres.

Par contre, si tu veux "juste" comprendre pourquoi ta boucle ne marche pas, ça vient de là :
Code :
foreach ( $amis as $amis ) {
Ton premier passage dans la boucle efface ton tableau.

Tu devrais avoir :
Code :
foreach ( $amis as $ami ) {
bhamp0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 22h44.


 
 
 
 
Partenaires

Hébergement Web