Me revoilà avec quelques questions concernant l'ouverture/fermeture de la connection à la base de données.
J'aurais voulu savoir comment vous procédez ... De mon côté, j'ai une fonction connect_bd() qui me retourne un lien vers la connection à la bd. A chaque fois que je veux faire une requête, je fais :
Le problème vient avec l'imbrication de connections ... Je m'explique : si dans ma requête je fais appel à une autre fonction afin d'obtenir une valeur, et que ma fonction est codée en autonome pour aller chercher une valeur dans la base de données (donc avec sa propre connection à la bd et son propre mysql_close), je perds ma connection dans mon script principal !
Pourtant, il me semblait que mysql_close($lien_bdd); ne ferme que le lien qui est passé ... Il se pourrait alors que le lien vers la bdd qui est dans ma fonction soit le même que celui de ma page principale vu que j'utilise la même fonction pour initialiser ma connection ...
Bref, je ne vois pas trop comment gérer tout ça sans que cela s'entrecoupe ! Je ne sais pas si tout est clair, mais j'ai énormément besoin de vos conseils !!
Donc en fait, si j'ai bien compris, de votre côté, vous ouvrez une connection en début de page et la refermez à la fin ??
Je faisais ça mais un jour je me suis demandé si c'était bien propre au sens où la page peut rediriger vers une autre page au cours de sa lecture ... (genre if($toto) header(location:...);)
Dans ces cas là, que devient la connection ouverte en début de page Elle se fermera toute seule ?
Sauf erreur de ma part le header n'interrompt pas le script mais envoie des en-tete http au navigateur qui les interpretes.
Donc a mon avis le script va jusqu'a le fin et ferme la connection.
sur ce point il faudrait quand meme faire un teste du style définir une variable, faire une connexion mysql envoyer le header et inclure la variable dans une table puis fermer.
si la variable se retrouve sur la table c'est que je me suis pas trompé.(mais ce n'est que théorique)
ou tu peux verifier ta connection avant d'en re-ouvrir une autre par le lien retour lors de la connection et si jamais il y a deja une connection d'ouverte tu fais un test et ne ferme pas avant d'avoir completement fini.
$DejaConnect = 0;
$C = connection();
bla bla bla
//--- besoin d'une connection donc verif if(!$C) {connection(); $DejaConnect = 1;}
bla bla bla
//--- Ferme la connection si plus besoin
if(!$DejaConnect) Deconnection();
bla bla bla
//--- Fin Deconnection();
Ca peut etre aussi une solution si tu fais pas mal d'include dans tous les sens.
Le problème à mon avis est que tu écrases ta variable de connexion avec la nouvelles car tu utilises le même nom.
Tu ne devrais normalement jamais avoir d'imbrication. Tes fonctions internes ne devraient jamais ouvrir elles-mêmes une connexion mais utiliser toujours une variable globale de connexion.
De cette manière, tu ouvres ta connexion. Tu fais toutes tes requêtes sur ta DB et ensuite tu fermes ... le tout avec une seule connexion.
a page peut rediriger vers une autre page au cours de sa lecture ... (genre if($toto) header(location:...);)
Dans ces cas là, que devient la connection ouverte en début de page Elle se fermera toute seule ?
Oui elle se fermera toute seule. Il est toujours conseillé de fermer la connexion le plus tôt possible mais si tu ne fais pas appel à mysql_close, la connexion se fermera automatiquement en fin de script.