-
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?
-
Beh, credo che non si possa fare molto senza vedere il codice...
-
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...
-
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! ^^
-
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 :roll:), 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
-
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! :)
-
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...
-
Senza dubbio una soluzione migliore di quella che avevo proposto io...
Ciao
-
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.