lock table

Per bloccare e sbloccare una  tabella devo usare la funzione

mysql_query("LOCK TABLES prenota WRITE");
.....
query_inserimento
....
mysql_query("UNLOCK TABLES");

Visto che riguarda delle prenotazioni ho provato anche con le transazion BEGIN

Queste due funzioni (lock table e Begin) funzionano solo se  ho attivato InoDB,se no erro.

Ho un spazio su Aruba dove hanno disabilitato InnoDB e non c'è modo

di abilitarlo.

C'e' qualche altra soluzione per bloccare le tabelle?

Oppure devo cambiare spazio :)?

ciao

inviato 9 anni fa
leoneweb
X 0 X

perché vuoi bloccare la tabella?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Gestisce delle prenotazioni on-line.

Caso molto raro ma potrebbe succedere se due

utenti fanno una prenotazione di una stessa camera contemporaneamente,

questo non deve succedere.

Ci potrebbe essere qualche altra soluzione per risolvere questoproblema?

 :bye:

risposto 9 anni fa
leoneweb
X 0 X

Allora devi usare le transazioni e quindi devi avere MySQL con tabelle InnoDB.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Visto che in locale funziona a questo punto

voglio portarlo a termine e testarlo in locale,in un secondo momento

provvederò a cercare un server con InnoDB attivo anche se ce ne sono

rimasti pochi.

Volevo fare un'altra domanda.

La mia prenotazione avviene tramite passaggi di 4 pagine mediante Session,

il blocco delle tabelle avviene nella 1° pagina e lo sblocco nell'ultima pagina.

Adesso se inizio la prenotazione e blocco le tabelle ma alla seconda pagina

chiudo tutto le tabelle mi rimangono bloccate.

Questo succede solo in locale,mentre se sono su un server appena chiudo la

pagina si dovrebbero chiudere le Session e quindi il rilascio delle tabelle?

Oppure sono propriofuori strada?

risposto 9 anni fa
leoneweb
X 0 X

Temo che al termine di uno script, ovvero alla chiusura di una connessione con mysql, il lock sulla tabella venga automaticamente rilasciato, quindi la tua tecnica non dovrebbe funzionare.

Neanche le transazione risolverebbe questo problema poiché le transazioni lasciate aperte credo che vadano in rollback alla chiusura della connessione.

 :bye:

P.S.: hosting con InnoDB ce ne sono, eccome...

risposto 9 anni fa
Gianni Tomasicchio
X 0 X
Temo che al termine di uno script, ovvero alla chiusura di una connessione con mysql, il lock sulla tabella venga automaticamente rilasciato,

Appunto quello che voglio,se chiudo la pagina devono essere rilasciati tutti i lock.

Ma perchè se provo in locale (Inizio una prenotazione e poi a metà chiudo la pagina

senza arrivare all'ultima) le tabelle mi rimangono sempre bloccate?

risposto 9 anni fa
leoneweb
X 0 X

mmm, forse non mi sono spiegato, e comunque non mi tornano i conti.

Allora, quando un utente visualizza una pagina lancia un script php che si connette a MySQL e che al temine della sua esecuzione chiude la connessione. Quindi quando l'utente vede la pagina che ha richiesto la connessione a MySQL è chiusa da un pezzo.

Come si legge nel manuale di MySQL

http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html

i lock alle tabelle vengono rilasciati quando si chiude la connessione:

All tables that are locked by the current thread are implicitly unlocked when the thread issues another LOCK TABLES, or when the connection to the server is closed

quindi al termine dello script dovresti perdere tutti i lock lasciati aperti.

O forse stai usando le connessioni persistenti?

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

Devo settare qualcosa nel php.ini o my.ini per le connessioni persistenti?

risposto 9 anni fa
leoneweb
X 0 X

Le connessioni persistenti si ottengono usando la mysql_pconnect() ma purtroppo non risolvono il tuo problema perché è vero che le connessioni rimangono aperte ma non è detto che una stessa connessione venga data sempre allo stesso utente durante la navigazione. In pratica vengono aperte un certo numero di connessioni e vengono date di volta in volta agli script che ne hanno bisogno.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda