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 ?
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"]... -
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 -
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. -
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.