mysql_pconnect comment fermer une connexion persistante ?

mysql_pconnect comment fermer une connexion persistante ? - PHP - Programmation

Marsh Posté le 17-05-2003 à 16:57:58    

salut,
 
 
j ai un petit pb dans mon code php :
 
j ouvre une connexion persistante avec mysql_pconnect (obligé car on va faire du transactionnel ...) et dans la doc ils disent qu on ne peut pas fermer la connexion avec mysql_close()... comment fermer alors une connexion ?
 
De plus, dans la doc ils disent que quand on utilise mysql_pconnect , le serveur verifie si une connexion sur la meme base avec le meme user existe deja et dans ce cas ne cree pas une nouvelle connexion mais renvoie le meme id de connexion . Ce n est pas mon cas . Lorsque j appelle 3 fois ma page php , dans winmysqladmin je vois 3 process (sleep) de connexion avec le meme user sur la meme base. Or j ouvre les connexions avec mysql_pconnect et normalement ca n aurait pas du etre le cas .
 
 
Quelqu un a une idee pour mon probleme ?
 
 
merci

Reply

Marsh Posté le 17-05-2003 à 16:57:58   

Reply

Marsh Posté le 17-05-2003 à 17:40:46    

:bounce:

Reply

Marsh Posté le 17-05-2003 à 18:07:37    

apres avoir cherché, je me suis apercu d un second probleme :
 
lorsque j utilise mon navigateur, j appelle mon script php . Si l appel est inferieur a 15 secondes il reutilise le meme process avec le meme user , par contre si c est superieur a 15 secondes il utilise un nouveau process et laisse l ancien ... donc 2 problemes se posent pour moi :
 
- comment changer ce timeout : la variable wait_timeout n a aucune influence sur celui ci.
- pourquoi les anciennes connexions restent ?
 
merci de m aider je ne comprends pas la ... :cry:

Reply

Marsh Posté le 17-05-2003 à 19:59:49    

Tu ne peux absolument pas considérer que plusieurs scripts puissent utiliser une même connexion à la base :non:

Reply

Marsh Posté le 17-05-2003 à 20:05:54    

la connexion se ferme à la fermeture de ta page ou après un time out déterminé par le serveur.

Reply

Marsh Posté le 18-05-2003 à 10:23:02    

pas d accord ... c est explicitiment dit dans la doc de php que la connexion mysql_pconnect N EST PAS fermée a la fin du script . Apparemment elle ne se ferme meme pas apres un timeout, il faudrait quitter et relancer le serveur mysql pour cela (j attends une confirmation car la c porc).  
 
J ai besoin d une connexion persistante pour la simple et bonne raison que je souhaite gerer les transactions .( A ce propos j aimerai savoir si les transactions sont faisables en web c est a dire en non connecté ce qui est contraire au principe des transactions).
 

Citation :

 
Tu ne peux absolument pas considérer que plusieurs scripts puissent utiliser une même connexion à la base :non:


 
Considerons 2 pages page1.php et page2.php avec un mysql_pconnect audebut de chacune. j appelle successivement page1 puis page2
 
D apres ce que j ai compris (mais je me trompe peut etre), le premier appel de mysql_pconnect cree une connexion persistante au serveur sur une base B avec un user U. Le second appel de la page2 (normalement) detecte qu il y a eu une connexion deja ouverte sur B avec U (c ecrit dans la doc PHP) et ne cree pas de nouvelle connexion mais reutilise l ancienne (qui est restée vu que c est une connexion persistante).  
Or vu que je veux utiliser les transactions, il m est necessaire d avoir une connexion persistante vu que la totalite de la transaction ne s effectue pas sur la meme page (on imagine page1 un INSERT INTO page2 un UPDATE etc etc ... enfin un COMMIT ou ROLLBACK). Est ce que  c est viable ?
 
 
merci de vos reponses :)

Reply

Marsh Posté le 18-05-2003 à 10:48:42    

le pconnect se ferme au bout de wait_timeout s que la connexion n'a pas été utilisée

Reply

Marsh Posté le 18-05-2003 à 10:51:10    

sinon je vois pas l'interet du pconnect : tant que USER n'aura pas fait de rollback ou de commit, ta transaction restera en suspend, même avec mysql_connect.


Message édité par joce le 18-05-2003 à 10:51:23
Reply

Marsh Posté le 18-05-2003 à 14:22:57    

joce a écrit :

sinon je vois pas l'interet du pconnect : tant que USER n'aura pas fait de rollback ou de commit, ta transaction restera en suspend, même avec mysql_connect.


éviter les scripts imbriqués qui ouvrent quinzes connexions à la même base.

Reply

Marsh Posté le 18-05-2003 à 14:28:50    

Tu ne peux pas considérer que tu auras la même connexion d'une page sur l'autre. Ce n'est absolument pas garanti par PHP.
 
Tu n'es même pas sur que tes 2 pages seront servies par le même serveur HTTP. Apache sur Unix se présente sous la forme de plusieurs processus, tes 2 pages peuvent très bien être générées par 2 processus différents ayant chacun leur propre connexion vers la base de données.
 
Et il se passe quoi si un autre utilisateur charge une page entre temps, avec ta transaction qui est en cours mais pas encore commitée ??

Reply

Marsh Posté le 18-05-2003 à 14:28:50   

Reply

Marsh Posté le 18-05-2003 à 14:31:32    

gizmo a écrit :


éviter les scripts imbriqués qui ouvrent quinzes connexions à la même base.

c'est que les scripts sont mal concus.
Les mysql_pconnect n'ont quasiment aucun interet, à part demander plus de ressource. D'ailleurs je discutais recemment avec georges qui s'occupe de l'API mysql dans php, et il me disait que le mysql_pconnect serait supprimé à terme (wrapper vers le mysql_connect).

Reply

Marsh Posté le 18-05-2003 à 14:36:14    

C'est pour éviter que PHP ne passe son temps à se connecter/déconnecter [:proy]  
Généralement, sur un site web, le serveur SQL ne sert que pour le serveur HTTP, et inversement. Donc, ca ne sert pas à grand chose de libérer la connexion alors qu'on sait très bien qu'il faudra la reprendre.
Mais c'est vrai qu'il faut se méfier. C'est facile de se retrouver avec des serveurs HTTP qui monopolisent toute les connexions au serveur SQL sans vouloir les libérer.

Reply

Marsh Posté le 18-05-2003 à 14:43:03    

mrBebert a écrit :

C'est pour éviter que PHP ne passe son temps à se connecter/déconnecter [:proy]  
Généralement, sur un site web, le serveur SQL ne sert que pour le serveur HTTP, et inversement. Donc, ca ne sert pas à grand chose de libérer la connexion alors qu'on sait très bien qu'il faudra la reprendre.
Mais c'est vrai qu'il faut se méfier. C'est facile de se retrouver avec des serveurs HTTP qui monopolisent toute les connexions au serveur SQL sans vouloir les libérer.


En pratique sur un site comme HFR, le PHP a pas le temps de se déconnecter : le thread est immédiatement monopolisé par une nouvelle connexion :D

Reply

Marsh Posté le 18-05-2003 à 14:54:18    

joce a écrit :

c'est que les scripts sont mal concus.
Les mysql_pconnect n'ont quasiment aucun interet, à part demander plus de ressource. D'ailleurs je discutais recemment avec georges qui s'occupe de l'API mysql dans php, et il me disait que le mysql_pconnect serait supprimé à terme (wrapper vers le mysql_connect).


 
Pas besoin d'un script mal conçu, il suffit à n'importe qui de prendre 2-3 scripts trouvés sur des bibliothèques de scripts. Du coups, ils se retrouvent avec des ouvertures/fermetures à gogo.
 
Faut voir ce qu'on cherche à faire de php, un langage pour tous ou un langage pour programmeur averti.

Reply

Marsh Posté le 18-05-2003 à 15:02:03    

gizmo a écrit :


 
Pas besoin d'un script mal conçu, il suffit à n'importe qui de prendre 2-3 scripts trouvés sur des bibliothèques de scripts. Du coups, ils se retrouvent avec des ouvertures/fermetures à gogo.
 
Faut voir ce qu'on cherche à faire de php, un langage pour tous ou un langage pour programmeur averti.

c'est pour ca que j'ai jamais utilisé de scripts trouvés sur des bibliothèques de scripts :D


Message édité par joce le 18-05-2003 à 15:02:08
Reply

Marsh Posté le 18-05-2003 à 15:07:03    

on est d'accord, mais monsieur tout le monde qui veut afficher un livre d'or et la météo sur son site ne le sait pas.

Reply

Marsh Posté le 18-05-2003 à 15:21:24    

gizmo a écrit :

on est d'accord, mais monsieur tout le monde qui veut afficher un livre d'or et la météo sur son site ne le sait pas.

oui mais monsieur tout le monde qui veut un livre d'or ou la météo, généralement il est chez un hébérgeur gratos qui est pas fou et qui passe la variable allow_persistant à false :D

Reply

Marsh Posté le 18-05-2003 à 22:08:04    

bon, apparemment mysql_pconnect n est plus a utiliser... je suis d accord avec ce que j ai vu sur www.php.net et nexen.net.
 
Par contre, il est necessaire pour ma (future) application d'utiliser les transactions (avec les tables innodb de mysql) . Cependant, comme vous l avez souligné un peu plus haut, un script php est chargé en memoire , executé puis a la fin du script , les variables sont detruites et les connexions fermées. Ainsi pour 2 pages p1 et p2 la connexion sera forcement differente a l execution du script p1 et du script p2.
 Du coup il m'est impossible d utiliser les transactions dans ce cas la vu qu une transaction n est valide que pour une meme connexion (ce qui n est pas le cas).
 
On m a dit qu il etait "possible" de conserver une connexion grace a apache (en  utilisant le principe de session) mais je ne sais pas bien comment faire ni si c est vraiment possible. Est ce que quelqu un connait la procedure pour faire ca ? et sinon est ce que les transactions en web sont possibles a mettre en oeuvre ?
 
 
merci de vos reponses :)

Reply

Marsh Posté le 18-05-2003 à 22:12:47    

Tu vas être obligé de mettre de côté toutes les infos nécessaires d'un script à l'autre, et de faire ta transaction à la fin seulement.
Pour ca, tu peux utiliser les sessions. C'est un moyen de garder des données d'un script à l'autre :)  
(en fait, c'est un fichier enregistré sur le serveur)

Reply

Marsh Posté le 18-05-2003 à 22:14:17    

donc tu veux dire qu il faut que je "simule" la transaction moi meme et que je ne peux donc pas utiliser le commit et le rollback ... mmm ca m arrange pas c t histoire . D autres idees ?

Reply

Marsh Posté le 18-05-2003 à 22:16:51    

au lieu de commencer ta transaction sql sur une page et la terminer sur l'autre, tu devrais, dans la 1ere, stocker les valeurs temporairement (en session par exemple), puis lorsque l'utilisateur à fait tout ce qu'il avait a faire (avec des formulaires je suppose), tu fais toute ta transaction ds un seul script php, en recuperant tout ce dont tu as besoin en session


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 18-05-2003 à 22:19:02    

d accord , je comprends . Je suppose  que de toute facon c est une des seules solutions et que la "transaction" n est pas implementable en php.
 
bon, va falloir revoir la documentation technique :(
 
 
merci de votre aide.

Reply

Marsh Posté le 18-05-2003 à 22:22:15    

c'est pas le php qui impose ça, mais le mode "application web" en general


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 19-05-2003 à 13:32:04    

(up deguisé)
 
Y a -t il une personne ayant deja rencontré mon probleme ?
( cad gerer une transaction sur plusieurs pages )
 
 
merci

Reply

Marsh Posté le 19-05-2003 à 13:46:46    

xilebo a écrit :

(up deguisé)
 
Y a -t il une personne ayant deja rencontré mon probleme ?
( cad gerer une transaction sur plusieurs pages )
 
 
merci

tout le monde; et je pense t'avoir dit comment faire.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed