Boucle MYSQL dans une function()

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Boucle MYSQL dans une function()

par AB » 06 nov. 2008, 22:36

Ok merci :)

J'ai finalement choisi ton idée sur le global pour éviter les déco reco intensifs de la BDD.

Sinon concernant l'utilisation des fonctions et l'usage de la charge serveur :

je dois faire appel à cette fonction ainsi que 3 autres (pour d'autres données) pour chaque jour d'un mois sur un mois entier.

Penses tu qu'il est mieux pour la rapidité du serveur de tout mettre les 3 fonctions dans UNE SEULE ou d'appeler pour chaque jour les 3 fonctions ?
Concernant l'idée de déclarer ta variable $bdd global, ça va fonctionner mais c'est pas top au niveau de la sécurité notamment pour des variables sensibles. C'est pour cela que je te conseillais plutôt de passer par l'appel à une fonction extérieure.
Sinon la proposition de caroube est encore plus simple à mettre en place bien que le principe de passer par une fonction offre certains autres avantages.

Normalement dans tous les cas, il n'y aura pas de déconnexions et reconnexions intensives, le serveur gérant ça "intelligemment" de manière transparente. Et puis si tu passes par une fonction tu pourrais utiliser une fonction static...

Concernant ta dernière question, faudrait qu'on voit les fonctions en question ... mais il est probable que l'écart entre les deux ne sera pas mesurable même si dans l'absolu, tout inclure dans une fonction devrait être un chouia plus rapide.
Un cas typique ou la différence serait importante, c'est si les fonctions traitaient par exemple, tous les éléments d'un même tableau ayant un grand nombre d'éléments. Dans ce cas chacune des fonctions listerait l'intégralité du tableau pour appliquer une fonction différente et il serait bien plus avantageux au niveau performance de les appliquer une seule fois dans la même boucle.

par caroube » 06 nov. 2008, 20:19

Question que tu peux te poser : est-ce que le nom de la base de données est une variable ou une constante ?
Si c'est une constante dans ton programme, il vaut mieux que tu déclares comme telle dans un script d'initialisation. De plus, une constante est globale, ce qui résoud ton problème

http://www.php.net/manual/fr/language.constants.php

par Bisvan » 06 nov. 2008, 17:49

Ok merci :)

J'ai finalement choisi ton idée sur le global pour éviter les déco reco intensifs de la BDD.

Sinon concernant l'utilisation des fonctions et l'usage de la charge serveur :

je dois faire appel à cette fonction ainsi que 3 autres (pour d'autres données) pour chaque jour d'un mois sur un mois entier.

Penses tu qu'il est mieux pour la rapidité du serveur de tout mettre les 3 fonctions dans UNE SEULE ou d'appeler pour chaque jour les 3 fonctions ?

par jojolapine » 06 nov. 2008, 17:46

ou sinon tu peux lire en entier la page sur la portée des variables, tu verrais qu'un simple
global $bdd;
dans ta fonction suffirait au lieu de se connecter de multiples fois...

par Bisvan » 06 nov. 2008, 17:23

Ok excuse. Comme je ne pensais pas que c'était ça le problème je m'y suis pas assez arrêté !

méaculpa :oops:

J'ai testé en créant une fonction de connexion et en l'appelant dans ma fonction première.
Tout fonctionne.
Merci beaucoup :)

par AB » 06 nov. 2008, 17:20

Heu... t'as pas dû t'arrêter assez longtemps sur la notion de portée des variables... (3ème message dans ce sens)

Donc dans cette même fonction, soit tu déclares global les variables nécessaires à la connexion, soit tu fait appel à une autre fonction (externe) qui permet la connexion. La deuxième solution étant la meilleure.

par Bisvan » 06 nov. 2008, 17:05

et en faisant un echo $bdd ?
Effectivement tu as raison.
J'ai rajouté au array $bb.
En résultat j'avais NULL

J'ai mis DANS la fonction le script de connexion à la BDD et maintenant j'ai bien le nom de ma base qui apparait.

Question : doit on forcément mettre dans chaque fonctions un script de connexion pour faire fonctionner des requêtes ? C'est bizarre non ?

par caroube » 06 nov. 2008, 17:00

et en faisant un echo $bdd ?

par Bisvan » 06 nov. 2008, 16:48

Sauf si celà est fait voulu , mais $sortie , récupére uniquement la valeur de $r['sortie'] du dernier enregistrement récupéré par ta requete ...
Oui car pour une date unique la sortie est la même.
Ensuite , que te donne l'affiche en brut de $retour_test ?
var_dump($retour_test);
array(2) { [0]=> NULL [1]=> NULL }

par stopher » 06 nov. 2008, 14:27

Salut,

il y a un chose qui m'interpelle dans ton code :
function test($date) 
{
    $participants="0";
    $query = "SELECT * from resultat WHERE date='$date' order by id";
    $result = mysql_db_query("$bdd", $query);
    while ($r = mysql_fetch_array($result)) {
    $nbre_participant=$r['nbre_participant'];
       $sortie=$r['sortie'];
    $participants=$participants+$nbre_participant;
    }
    return array($participants, $sortie); 
Sauf si celà est fait voulu , mais $sortie , récupére uniquement la valeur de $r['sortie'] du dernier enregistrement récupéré par ta requete ...

Ensuite , que te donne l'affiche en brut de $retour_test ?
var_dump($retour_test);

par AB » 06 nov. 2008, 13:51

Merci pour ta réponse.

J'ai un peu regardé l'article mais je ne pense pas que cela soit ça le soucis.
En effet j'ai déjà utilisé le passage de variable par un tableau array() dans une fonction et cela marchait. Sauf que j'utilisais une requête sql simple (sans while())
Je pencherais plus sur un problème de boucle avec le while() de ma requête qui doit bloquer quelque part pour que les résultats ne me parviennent pas, mais je ne sais pas quoi modifier :(
Excuses moi d'insister, mais si comme tu l'a dit, le même code fonctionne sans être dans une fonction, c'est typiquement une histoire de portée des variables...

Par exemple dans ta fonction, la variable $bdd est renseignée comment ?

par Bisvan » 06 nov. 2008, 13:30

Merci pour ta réponse.

J'ai un peu regardé l'article mais je ne pense pas que cela soit ça le soucis.
En effet j'ai déjà utilisé le passage de variable par un tableau array() dans une fonction et cela marchait. Sauf que j'utilisais une requête sql simple (sans while())
Je pencherais plus sur un problème de boucle avec le while() de ma requête qui doit bloquer quelque part pour que les résultats ne me parviennent pas, mais je ne sais pas quoi modifier :(

par AB » 06 nov. 2008, 13:17

Certainement un problème de portées des variables
http://www.lephpfacile.com/cours/21-la- ... -variables

Boucle MYSQL dans une function()

par Bisvan » 06 nov. 2008, 12:58

Hello,

J'ai un petit problème avec les fonctions.
J'ai une table RESULTAT avec deschamp id, date, sortie et nbre_participant

J'aimerai créer une fonction test($date); qui va calculer pour une date donnée le nombre de participants et le renvoyer dans un tableau avec le nom de la sortie.
function test($date) 
{
	$participants="0";
	$query = "SELECT * from resultat WHERE date='$date' order by id";
	$result = mysql_db_query("$bdd", $query);
	while ($r = mysql_fetch_array($result)) {
	$nbre_participant=$r['nbre_participant'];
       $sortie=$r['sortie'];
	$participants=$participants+$nbre_participant;
	}
	return array($participants, $sortie);
}

Or quand j'appelle cette fonction : je n'ai aucuns résultats qui s'affichent :cry: (alors que le script sans être dans la fonction marche correctement)
$retour_test= test($date);
echo $retour_test[0];
echo $retour_test[1];
Vous auriez une idée pour m'aider ?

Merci :)