Truc bizarre avec ma requête mysql
Résolu
Edouard
-
Edouard -
Edouard -
Bonjour, j'ai un petit truc bizarre avec ma requete mysql.
J'ai fait ce petit bout de code et il me retourne tous les couples clé => valeur en double ?
Et voilà le résultat :
0 | 1
id | 1
1 | edouard
nom_auteur | edouard
2 | test
prenom_auteur | test
En fait il me retourne :
l'identifiant de la clé => la valeur
le nom de la clé => la valeur
9a vient de quoi, il y a des tableaux impbriqués ?
J'ai fait ce petit bout de code et il me retourne tous les couples clé => valeur en double ?
// Création de la requete sql
$sql=mysql_query("select * from publications");
$nbrligne=mysql_num_rows($sql);//nombre de ligne
if ($nbrligne=="0"){
echo AuStripSlashes("Il n'y a pas de publications dans la base de données.");
}
else{
while ($row=mysql_fetch_array($sql))
{
// debuggage
foreach($row as $key => $value){
echo "$key | $value <br>";
}
} // fin while $row
} // fin else nbrligne = 0
Et voilà le résultat :
0 | 1
id | 1
1 | edouard
nom_auteur | edouard
2 | test
prenom_auteur | test
En fait il me retourne :
l'identifiant de la clé => la valeur
le nom de la clé => la valeur
9a vient de quoi, il y a des tableaux impbriqués ?
A voir également:
- Truc bizarre avec ma requête mysql
- Wap truc - Télécharger - Navigateurs
- Mysql community download - Télécharger - Bases de données
- Erreur de requete facebook - Forum Facebook
- Mysql fatal error ✓ - Forum MySQL
- Quelle requête écrire pour demander au moteur de recherche de présenter de préférence les pages web traitant de tennis mais pas de tennis de table ✓ - Forum Java
4 réponses
Bonjour,
Le problème est que mysql_fetch_array renvoit un tableau qui est à la fois indexé et associatif.
Donc $row[0] == $row["id"].
Et au final, logiquement, ton foreach va afficher les deux.
Pour résoudre ton problème, utilises plutôt mysql_fetch_assoc() qui ne renvoit qu'un tableau associatif.
Xavier
PS : la conséquence, bien sûr, c'est que tu ne pourras plus appeler l'id de l'enregistrement en utilisant $row[0], mais uniquement avec $row["id"]...
Le problème est que mysql_fetch_array renvoit un tableau qui est à la fois indexé et associatif.
Donc $row[0] == $row["id"].
Et au final, logiquement, ton foreach va afficher les deux.
Pour résoudre ton problème, utilises plutôt mysql_fetch_assoc() qui ne renvoit qu'un tableau associatif.
Xavier
PS : la conséquence, bien sûr, c'est que tu ne pourras plus appeler l'id de l'enregistrement en utilisant $row[0], mais uniquement avec $row["id"]...
super, merci
Pour ta remarque sur l'impossibilité d'appeller par row[0] en fait ça me gène pas du tout puisque j'utilise extract.
Est-ce déconseillé ?
Edouard
Pour ta remarque sur l'impossibilité d'appeller par row[0] en fait ça me gène pas du tout puisque j'utilise extract.
Est-ce déconseillé ?
Edouard
Je ne sais pas, je ne connais pas extract ^^
Personnellement j'utilise mysql_fetch_object, qui permet d'obtenir un objet $row, dont les valeurs sont en fait des attributs, ce qui donne $row->id pour obtenir l'id. Par contre, je ne pense pas que de cette façon on puisse faire un foreach sur les différentes valeurs, comme tu le fais.
Personnellement j'utilise mysql_fetch_object, qui permet d'obtenir un objet $row, dont les valeurs sont en fait des attributs, ce qui donne $row->id pour obtenir l'id. Par contre, je ne pense pas que de cette façon on puisse faire un foreach sur les différentes valeurs, comme tu le fais.
l'intérêt d'extract est de te transformer rapidement les données d'un tableau en variables $row["id"] devient $id... ce qui me permet d'utiliser immédiatement toutes les infos de ma requête dans le code, par contre ta méthode est a priori plus propre pour une programmation objet que la mienne.
Généralement extract est utilisée sur $_post ou $_get ou $_session, mais je me suis dit que si ça marche sur tout type de tableau, ça pouvait également le faire gagner du temps sur $row...
merci et à plus.
Généralement extract est utilisée sur $_post ou $_get ou $_session, mais je me suis dit que si ça marche sur tout type de tableau, ça pouvait également le faire gagner du temps sur $row...
merci et à plus.