Visualizzazione risultati 1 fino 9 di 9

Discussione: mysql accesso singolo

  1. #1
    L'avatar di skydrake
    skydrake non è connesso Utente
    Data registrazione
    22-04-2006
    Residenza
    Verona
    Messaggi
    218

    Predefinito mysql accesso singolo

    tentiamo di spiegare il problema:

    2 accessi quasi contemporanei al database.
    ognuno di questi due accessi:
    apre la connessione
    con una prima query legge una stringa.
    con la seconda la modifica.
    chiude la connessione

    mi capita che vi siano 2 connessioni aperte e che la seconda connessione legga prima che la prima abbia modificato i dati (e quindi poi molte cose mi sballano...). Vorrei che non succedesse. Cosa dovrei fare per fare in modo che il database faccia attendere le altre connessioni mentre sta completando le varie query della prima connessione?
    Ultima modifica di skydrake : 24-06-2008 alle ore 08.41.55

  2. #2
    L'avatar di mythologia
    mythologia non è connesso Moderatore
    Data registrazione
    05-01-2004
    Messaggi
    2,614

    Predefinito

    Beh, credo che non si possa fare molto senza vedere il codice...

  3. #3
    L'avatar di skydrake
    skydrake non è connesso Utente
    Data registrazione
    22-04-2006
    Residenza
    Verona
    Messaggi
    218

    Predefinito

    spererei che fosse qualcosa che abbia a che fare con un qualche motore di archiviazione dei database, da php non si tiene conto delle altre richieste php, o almeno non riuscirei a farlo velocemente...

  4. #4
    Guest

    Predefinito

    Beh...io uso 1 connessione x + query...quindi credo che anche tu lo potresti fare! ^^
    Basta una connessione x + queries...
    Ad esempio: Devo aggiungere una news...faccio 3 o 4 query:
    1 = Inserimento
    2 = Mostro in un "select" le categorie
    == DOPO INVIO ==
    3 = Mostro l'ID dell'ultima news
    4 = Mostro il nome della categoria ricavato dall'ID nella tabella news.
    Ciao! ^^

  5. #5
    Guest

    Predefinito

    Sim forse non hai capito cosa (precisamente) intendeva skydrake...

    @ skydrake: la prima cosa che mi viene in mente è l'utilizzo di un semaforo (di sincronizzazione).
    probabilmente esiste un metodo migliore e più efficiente (non sono un guru del php ), ma potresti per esempio utilizzare un file di testo per memorizzare il valore di una variabile ($busy) che assume valore VERO appena si apre una connessione e FALSO appena la si chiude.
    Prima di aprire una connessione si controlla il valore di questa variabile e se uguale a FALSO si fà attendere lo script...

    Utilizzando un metodo del genere potresti andare incontro a dei problemi:
    -uno script cerca di accedere al file di testo, ma è già aperto da un altro processo;
    -nel caso di moooolte visite contemporanee potrebbe capitare che uno script superi il tempo massimo di esecuzione (su AV è di 15 secondi se non erro).


    L'dea del file di testo è la più banale che mi è venuta in mente...
    Magari lo puoi sostituire con una variabile dichiarata static, dipende da cosa hai in mente di fare...

    Ciao

  6. #6
    Guest

    Predefinito

    Mmm...forse ho capito!
    Codice PHP:
    $con = mysql_connect('root','pass','localhost');
    mysql_select_db('ciao',$con);

    if(
    $con == TRUE) {

    $file =fopen('file.txt','wt')

    $global = TRUE;

    if(
    $file) {

    if(
    $global == TRUE OR $global == FALSE {
    if(
    $global == TRUE) {

    fwrite($file, "TRUE")

    }

    if(
    $global == FALSE) {

    fwrite($file, "FALSE")

    }
    } else {

    fwrite($file, "FALSE OR TRUE")

    }
    fclose($file);

    }

    } else {

    echo
    "No $con";
    }
    mysql_close($con);
    Non ho provato..ma credo debba funzionare!
    Ciao! :)
    Ultima modifica di sIM : 24-06-2008 alle ore 15.47.42

  7. #7
    L'avatar di skydrake
    skydrake non è connesso Utente
    Data registrazione
    22-04-2006
    Residenza
    Verona
    Messaggi
    218

    Predefinito

    grazie a tutti per gli aiuti.
    Alla fine ho trovato quello che cercavo.

    la funzioncina mysql LOCK TABLE che garantisce l'accesso univoco a una tabella ad una singola connessione per poter passare tutte le query. (che fa proprio quello che volevo, me costa 2 query in piu a pagina... ma magari è la volta buona che spendo sti 6 euretti e passo alla massima classe di database...

  8. #8
    Guest

    Predefinito

    Senza dubbio una soluzione migliore di quella che avevo proposto io...

    Ciao

  9. #9
    L'avatar di skydrake
    skydrake non è connesso Utente
    Data registrazione
    22-04-2006
    Residenza
    Verona
    Messaggi
    218

    Predefinito

    come uso query era migliore la tua che le risparmiava :P
    ma la mia fa fare il lavoro a mysql invece che a me :) quindi mi piace di piu :)

    EDIT: PS, questione risolta, si può chiudere.
    Ultima modifica di debug : 24-06-2008 alle ore 19.40.43

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •