Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1128 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  mysql_pconnect comment fermer une connexion persistante ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

mysql_pconnect comment fermer une connexion persistante ?

n°397968
xilebo
noone
Posté le 17-05-2003 à 16:57:58  profilanswer
 

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

mood
Publicité
Posté le 17-05-2003 à 16:57:58  profilanswer
 

n°397999
xilebo
noone
Posté le 17-05-2003 à 17:40:46  profilanswer
 

:bounce:

n°398032
xilebo
noone
Posté le 17-05-2003 à 18:07:37  profilanswer
 

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:

n°398090
mrbebert
Posté le 17-05-2003 à 19:59:49  profilanswer
 

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

n°398099
gizmo
Posté le 17-05-2003 à 20:05:54  profilanswer
 

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

n°398280
xilebo
noone
Posté le 18-05-2003 à 10:23:02  profilanswer
 

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 :)

n°398287
joce
Architecte / Développeur principal
"BugHunter"
Posté le 18-05-2003 à 10:48:42  profilanswer
 

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

n°398288
joce
Architecte / Développeur principal
"BugHunter"
Posté le 18-05-2003 à 10:51:10  profilanswer
 

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
n°398401
gizmo
Posté le 18-05-2003 à 14:22:57  profilanswer
 

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.

n°398407
mrbebert
Posté le 18-05-2003 à 14:28:50  profilanswer
 

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 ??

mood
Publicité
Posté le 18-05-2003 à 14:28:50  profilanswer
 

n°398410
joce
Architecte / Développeur principal
"BugHunter"
Posté le 18-05-2003 à 14:31:32  profilanswer
 

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).

n°398412
mrbebert
Posté le 18-05-2003 à 14:36:14  profilanswer
 

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.

n°398416
joce
Architecte / Développeur principal
"BugHunter"
Posté le 18-05-2003 à 14:43:03  profilanswer
 

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

n°398422
gizmo
Posté le 18-05-2003 à 14:54:18  profilanswer
 

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.

n°398425
joce
Architecte / Développeur principal
"BugHunter"
Posté le 18-05-2003 à 15:02:03  profilanswer
 

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
n°398428
gizmo
Posté le 18-05-2003 à 15:07:03  profilanswer
 

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.

n°398435
joce
Architecte / Développeur principal
"BugHunter"
Posté le 18-05-2003 à 15:21:24  profilanswer
 

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

n°398797
xilebo
noone
Posté le 18-05-2003 à 22:08:04  profilanswer
 

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 :)

n°398799
mrbebert
Posté le 18-05-2003 à 22:12:47  profilanswer
 

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)

n°398800
xilebo
noone
Posté le 18-05-2003 à 22:14:17  profilanswer
 

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 ?

n°398802
the real m​oins moins
Posté le 18-05-2003 à 22:16:51  profilanswer
 

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 ?
n°398805
xilebo
noone
Posté le 18-05-2003 à 22:19:02  profilanswer
 

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.

n°398808
the real m​oins moins
Posté le 18-05-2003 à 22:22:15  profilanswer
 

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


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°399466
xilebo
noone
Posté le 19-05-2003 à 13:32:04  profilanswer
 

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

n°399484
the real m​oins moins
Posté le 19-05-2003 à 13:46:46  profilanswer
 

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 ?
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  mysql_pconnect comment fermer une connexion persistante ?

 

Sujets relatifs
[MySQL] Besoin d'aide pour une requête[mysql] clée primaire: avoir 00001 au lieu de 1
Connexion à une base access située sur un autre serveur[mysql] inserer des données provenant d'une autre table
MySQL : Errcode 144[Php, mysql] [résolu] Récupérer la valeur de max_allowed_packet ?
[RESOLU][JBDC][MYSQL] un petit pb d'accent?comment récupérer en php les valeurs possibles d'un enum mysql
[PHP/MYSQL]Parametre dans les URL, probleme de majuscules[Mysql] Backup
Plus de sujets relatifs à : mysql_pconnect comment fermer une connexion persistante ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR