LOCK TABLES e chiusura connessione al db

  • Creatore Discussione Creatore Discussione mrjohn
  • Data di inizio Data di inizio

mrjohn

Nuovo Utente
3 Apr 2012
8
0
0
Salve mi sto cimentando nella realizz. di un sistema di prenotazione camere albergo.Mi sorgono alcuni dubbi sull'uso dei LOCK.Il sistema è strutturato in due fasi:
FASE 1. verifico disponibilità in determinati giorni(e faccio lock iniziale in maniera corretta sulle varie tabelle).seleziono le camere da prenotare..tasto PROCEDI->
(il tasto PROCEDI mi apre nuova pagina per inserire i dati del cliente ecc.)
FASE 2. inserisco il resto dei dati (nome cognome e carta) ..tasto PRENOTA (faccio la INSERT in db e pensavo di fare UNLOCK TABLES)

ora passando da una pagina all'altra (quindi da uno script all'altro) la connessione termina e il lock di conseguenza non viene tenuto.la mia domanda è :
qual è la prassi in questi casi ..(passando da una pagina ad un'altra) si rieffettua sempre la connessione e si trova un modo di gestire i lock in maniera corretta oppure si tiene attiva la connessione pur passando da uno script ad un altro? (se è cosi come si realizza questa cosa? ho letto che le connessioni persistenti mysql_pconnect() sarebbero da evitare)

grazie mille
 
Io eviterei completamente di fare il lock della tabella, e aggiungerei invece due campi alla tabella delle prenotazioni: created_at e confirmed. Nella prima fase inserisci i dati nella tabella e imposti created_at alla data attuale, e confirmed a 0. Nella seconda fase aggiorni i dati rimanenti e imposti confirmed a 1. Puoi passare l'ID del record creato in una variabile di sessione.

Per evitare che, chiudendo la pagina a metà, i giorni rimangano comunque prenotati, imposti un cron job eseguito ogni 5 minuti (regolati tu) che elimina tutte le prenotazioni con il campo confirmed impostato a 0 e create più di 10 minuti fa. Se il tuo hosting non supporta i cron job (e non puoi cambiare hosting), puoi anche eseguire la query ogni volta che si accede al sito.

P.S. Evita l'utilizzo della libreria mysql, che è di fatto deprecata. Usa invece PDO.
 
ma se non metti i LOCK c'è sempre la possibilità che mentre l'utente 1 sta per settare i campi "created_at" e "confirmed" un secondo utente avvia anche lui la ricerca di una camera libera che libera non è a quel punto.e quindi va avanti con la procedura ed entrambi gli utenti prenotano la stessa camera per lo stesso giorno.
 

Discussioni simili