Page 1 sur 1

while et foreach (avec le resultat d'un requette SQL)

Posté : 08 juin 2005, 09:50
par Dhjapan
Bonjour,
voilà dans le but de générer un XML à partir d'une base SQL je voudrais utiliser foreach pour parcourir tout mes rsultats, je vous montre :
$sql="SELECT * FROM dhjapan_links LIMIT 0,1;";
		$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error());
		while($data = mysql_fetch_array($req)){
			foreach ($data as $key => $value)
			{
				echo $key." : ".$value."<br>";
			}
		}
mais tout ceci me renvois chaque valeur en double :

Code : Tout sélectionner

0 : 1 id : 1 1 : http://styleboost.com adresse : http://styleboost.com 2 : 2004-10-18 day : 2004-10-18 ...
je pourrai verifier si la longueur de la chaine $key est superieur à 1, ca reglerai mon probleme, mais j'aimerai comprendre.

Merci

Posté : 08 juin 2005, 09:58
par zeus
la fonction mysql_fetch_array($result) retourne un tableau indexé par entiers et par nom de colonne !!! C'est a dire que tu peux utiliser le tableau $a_tab[1] ou $a_tab["nomCol"] !!!

Pour parvenir à ce résultat, il enregistre donc le résultat du champ 1 dans 2 cases : [1] et ["nomChamp1"] !!!

C'est pour ça que tu as tout en double !!!

SI tu veux éviter ce pb, tu peut ecrire

mysql_fetch_array($result, MYSQL_NUM)

pour tout indexer sur des entiers
ou encore

mysql_fetch_array($result, MYSQL_ASSOC)

pour tout indexer sur les noms de colonnes

plus d'infos ==> ICI<==

Prend surtout gare au paragraphe suivant :
L'option result_type de mysql_fetch_array() est une constante qui peut prendre les valeurs suivantes : MYSQL_ASSOC, MYSQL_NUM et MYSQL_BOTH.Cette fonctionnalité a été ajoutée en PHP 3.0.7. MYSQL_BOTH est la valeur par défaut de cet argument.

En utilisant MYSQL_BOTH, vos obtiendrez un tableau qui sera à la fois associatif et indexé numériquement. En utilisant MYSQL_ASSOC, vous obtiendrez un tableau associatif (tout comme le fait mysql_fetch_assoc()), et en utilisant MYSQL_NUM, vous obtiendrez un tableau indexé nuériquement (comme le fait mysql_fetch_row()).

[RESOLU]

Posté : 08 juin 2005, 11:03
par dhjapan
Super!
Merci c'est exactement ce que j'avais pas compris.