L'accés concurentiel

Résolu
cs_machmacha Messages postés 97 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 28 mai 2010 - 5 mai 2007 à 12:35
cs_machmacha Messages postés 97 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 28 mai 2010 - 5 mai 2007 à 13:36
Bonjour,
j'ai pensé a faire un traitement sur l'accées a ma base de données, càd lorsque quelqu'un veux s'inscrir sur mon site web et en meme moment une autre personne veux faire la meme opération, alors jai pensé a faire le code suivant:

$sql = "INSERT  INTO connexion(Id,champ1,champ2)
  VALUES ( NULL, '$champ1','$champ2') " ;

 mysql_query("LOCK TABLES connexion WRITE");
mysql_query("SET AUTOCOMMIT = 0");
  $requete = mysql_query($sql, $cnx) or die( mysql_error() ) ;
//......traitement
mysql_query("COMMIT");
mysql_query("UNLOCK TABLES");
mais lorsque j'exécute je reçois l'erreur suivante:

Table 'proc' was not locked with LOCK TABLES
est ce que vous avez une idée sur ce genre de problème
Merci d'avance.

4 réponses

neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
5 mai 2007 à 13:10
Ben...

MySQL permet de gérer les permissions de chaque utilisateur.
Les utilisateurs MySQL créés pour les hébergements ont toujours les permissions suivantes sur LEUR BASE :
Pour les données :
- SELECT
- INSERT
- UPDATE
- DELETE
- FILE
Pour la structure des tables :
- CREATE
- ALTER
- INDEX
- DROP
- CREATE TEMPORARY TABLES
- CREATE VIEW
- SHOW VIEW
- CREATE ROUTINE
- ALTER ROUTINE
- EXECUTE
Pour l'administration, rien du tout.

OR, LOCK et UNLOCK requierent un privilège d'administration pour être exécutées.

Juste comme ça... Pourquoi souhaites tu verrouiller une table ? Les deux actions ont très peu de chances de se produire exactement en même temps et PHP et MySQL savent très bien gérer ça et l'une des deux se produira forcément avant l'autre.
Par ailleurs, si tu verrouilles une table et que ton script met un peu de temps à s'exécuter pour une raison X ou Y, et qu'une autre isntance du script essaye d'accéder à la table, alors ça bloquera, alors que MySQL se serait très bien dépatouillé tout seul.
Verrouiller une table est utile si tu souhaites faire des opérations de maintenance dessus. C'est généralement utilisé pour des applications autres que PHP.
3
neigedhiver Messages postés 2480 Date d'inscription jeudi 30 novembre 2006 Statut Membre Dernière intervention 14 janvier 2011 19
5 mai 2007 à 12:55
Salut,

Est-ce tu as les permissions pour utiliser LOCK et UNLOCK ? C'est pas forcément le cas selon ton hébergeur.
0
cs_machmacha Messages postés 97 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 28 mai 2010
5 mai 2007 à 12:59
qu'est que tu veux dire par les permissions, explique moi svp??
0
cs_machmacha Messages postés 97 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 28 mai 2010
5 mai 2007 à 13:36
ok merci pour vos réponses, je penserai a ce que vous m'avez dis .
bon weekend
0
Rejoignez-nous