Comment passer l'array de mysql_fetch_array() ?

Répondre
burnedsoul
le 20/12/2006 à 12:19
burnedsoul
Bonjour,
Voilà une question qui peut paraître bête :
Je voudrais faire une fonction qui va chercher les infos dans une table, et qui renvoie l'array (généré par mysql_fetch_array).


<?php 
// ...
// Connection à la base de données effectuée
function topfonction(){
$requete = mysql_query("select * from table");
$array = mysql_fetch_array($requete);
if (isset($array)) return $array;
}

// Appel de la fonction
$tab = top_fonction();

while ($tab)
{
echo "$tab[ 'champ1'];
}

?>


Donc là, cela me crée une boucle infinie, au lieu d'afficher, par exemle, deux lignes dans la base :/

J'ai testé différentes variantes et soit cela m'affiche la dernière entrée dans la table, ou ça me fait cette sorte de boucle infinie.

Merci d'avance et désolé si ça parait simplissime, je dois pas être assez réveillé ce matin ;)
Webmaster de Clikmag http://www.clikmag.fr
zebden
le 20/12/2006 à 13:02
zebden
Lu,

explication :

$array = mysql_fetch_array($requete); va en fait te retourner la dernière ligne de la table selectionnée.

mysql_fetch_array ne retourne pas un tableau proprement dit mais va permettre de parcourir les lignes de ta table en fonction de la requête que tu executes.

On peut alors imaginer ceci :

<?php
function topfonction($requete) {

$query = mysql_query($requete) or die('bla bla');

//
// Ici mysql_fetch_assoc est la même fonction que mysql_fetch_array
// à la différence qu'il ne retourne QU'UN tableau associatif (la clé est une string)
// à l'inverse de .._array() qui retourne le tab asso et un tab à clé numérique.

// On parcourt donc les lignes de ta table pour les inserer dans un tableau.
while($donnee = mysql_fetch_assoc($query) {

// Exemple aussi, mettre l'id unique comme clé.
$id = $donnee['champ_id'];
$tableau[$id] = $donnee;
}

// Return false si aucune donnée.
if(!$tableau) return FALSE;

// On retourne les données
return $tableau;
}

// Exemple :
$mesDonnees = topfonction('SELECT `machin` FROM `table`');

if(!$mesDonnees) echo 'Desolé aucun enregistrement';
else {
// On parcours cette fois le tableau avec foreach
foreach($mesDonnees as $id => $information) {
echo $information['champ1'];
}
?>


?>

Voilà, je pense que ça va te simplifier le vie ;)
zebdinou pour les intimes / Blog : http://www.zebden.fr
burnedsoul
le 20/12/2006 à 13:46
burnedsoul
Ok merci beaucoup :)
Il y a une différence entre utiliser la nouvelle topfonction et simplement ceci ?
// J'ai pas détaillé les différents tests
$requete = mysql_query("select * from table");
while ($r=mysql_fetch_array($requete))
{
echo $r['champ1'];
}
Webmaster de Clikmag http://www.clikmag.fr
moogli
le 20/12/2006 à 14:07
moogli
lu,

la fonction inclus plus de traitement plus qu'il va ta falloir parcourir le tableau retourné en plus du parcourt de la ressource mysql donc plus long et moins performant !

@+
Il en faut peu pour être heureux !!!!!
zebden
le 21/12/2006 à 16:17
zebden
Pas forcement vrai,

Une fois les données enregistrées, il n'est plus nécessaire de revenir à la base. ce qui implique moins de ressource.

Surtout quand tu travailles en procédural. Et si tu approfondis cette fonction en passant à la POO, tu allègeras largement ton code et gagneras ainsi bcp de ressources.

Cela n'est absolument pas négligeable. Surtout que parcourir un simple tableau n'est pas si alourdissant que ça, que de parcourir une seconde fois ta table peut l'être.

De plus si tu centralises toutes tes actions, cela implique moins de complications lors du débugage ou d'évolution de ton code.
zebdinou pour les intimes / Blog : http://www.zebden.fr
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours