questions php/mysql :p

questions php/mysql :p - PHP - Programmation

Marsh Posté le 31-03-2003 à 10:06:05    

youp,
 
 
je voudrais avoirs quelques confirmations :)
 
 
quand on fait,  
 

1. $brol = mysql_query("SELECT....);
2. $result = mysql_fetch_array($brol);


 
à la ligne 2. la base est-elle interrogée ?  
 
 
deuxième chose, je voudrais savoir ce qui se passe quand deux personnes ajoutent en meme temps quelque chose dans la base.
 
ca peut faire des problèmes non ?
 
j'emploie mysql 3.23.43 et je ne peux pas employer de table Innodb (c'est ca ?). Comment faire pour éviter les problèmes ?
 
 
 
mercitoo le mondeuh :jap:
 
 
 
ps: sorry pour le titre pas explicite, je savais pas quoi mettre


Message édité par art_dupond le 31-03-2003 à 10:17:28
Reply

Marsh Posté le 31-03-2003 à 10:06:05   

Reply

Marsh Posté le 31-03-2003 à 11:13:54    

il me semble que la base n'est lue que lors de l'éxécution de ta requête, ensuite les lignes correspondantes sont placées en mémoire
 
concernant les insertion concurrentes, mysql utilise un système de lock, l'insertion au même moment est impossible (les requêtes sont traitées l'une après l'autre)


---------------
La musique c'est comme la bouffe, tu te souviens du restaurant dans lequel t'as bien mangé 20 ans plus tôt, mais pas du sandwich d'il y a 5 minutes :o - Plugin pour winamp ©Harkonnen : http://harko.free.fr/soft
Reply

Marsh Posté le 31-03-2003 à 11:14:02    

art_dupond a écrit :

youp,

1. $brol = mysql_query("SELECT....);
2. $result = mysql_fetch_array($brol);


 
à la ligne 2. la base est-elle interrogée ?


non


---------------
Ma galerie photo créée avec Piwigo et hébergée sur Piwigo.com
Reply

Marsh Posté le 31-03-2003 à 13:41:54    

oki pour le 1
 
par contre ce pour le deux,...  
 
bon je prends un exemple :
 
 
si une action modifie deux trucs dans la base et que le deuxième truc à modifier dépend du premier truc
 
si quelqu'un fait une 'action' => modifier le premier truc
si quelqu'un d'autre fait une action à ce moment là, il va peut-etre re-modifier le truc avant que le deuxième truc (du permier gars) ne soit modifié, ce qui va causer problème...
 
non ?

Reply

Marsh Posté le 31-03-2003 à 13:57:49    

avec une simple query select, tu n'as aucun moyen de savoir qu'un autre ne va pas modifier tes données dans l'intervalle.  Il faut que tu gardes une connexion active sur ta DB et réserver (locker) le(s) row(s) que tu as l'intention de modifier, jusqu'à modification ou annulation.  Si tu perds ta connexion, tu perds aussi le lock.  C'est la philosophie du truc.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 31-03-2003 à 14:16:04    

il faut que je fasse une connection persistente c'est ca ?
 
comment on reserve les rows ?

Reply

Marsh Posté le 31-03-2003 à 14:32:46    

art_dupond a écrit :

youp,
quand on fait,  
 

1. $brol = mysql_query("SELECT....);
2. $result = mysql_fetch_array($brol);


 
à la ligne 2. la base est-elle interrogée ?


Non. Tu peux d'ailleurs fermer ta connexion après ta ligne 1.
 

art_dupond a écrit :

il faut que je fasse une connection persistente c'est ca ?
 
comment on reserve les rows ?


Pas besoin d'une connexion persistante, ca n'a rien à voir. Pour bloquer ta table le temps d'un traitement tu dois utiliser, si tu n'as pas accès au handle InnoDB :
 
LOCK TABLES tatable / traitement / UNLOCK TABLES

Reply

Marsh Posté le 31-03-2003 à 14:42:07    

mmmh ici c'est une row qu'on veut locker, pas une table, ce que MySQL ne permet apparemment pas (je viens de fouiller la doc à ce sujet).  D'autre part, la doc spécifie qu'un lock est perdu dès que la connexion est coupée.


---------------
Whichever format the fan may want to listen is fine with us – vinyl, wax cylinders, shellac, 8-track, iPod, cloud storage, cranial implants – just as long as it’s loud and rockin' (Billy Gibbons, ZZ Top)
Reply

Marsh Posté le 31-03-2003 à 14:45:09    

drasche a écrit :

mmmh ici c'est une row qu'on veut locker, pas une table, ce que MySQL ne permet apparemment pas (je viens de fouiller la doc à ce sujet).  D'autre part, la doc spécifie qu'un lock est perdu dès que la connexion est coupée.


Si, le row locking est géré, mais sous InnoDB uniquement,  MyISAM se limite au table locking.

Reply

Marsh Posté le 31-03-2003 à 16:14:14    

oki merci les gens

Reply

Sujets relatifs:

Leave a Replay

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