Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    [MYSQL] last_insert_id è sicura?

    Ho una tabella con un campo autoincrementale, dopo l'ìnserimento devo conoscere l'id che ho inserito, lo posso fare con mysql_insert_id() (o last_insert_id) credo sia indifferente. La mia domanda è ma se qualcun'altro inserisce prima che io abbia selezionato l'ultimo id inserito cosa mi scappa fuori (supponendo che in questa tabella ci siano molti inserimenti)? Nel senso, la mysql_insert_id filtrata sulla connessione mi dà l'utlimo id inserito su quella connessione, quindi in teoria se qualcun'altro inserisce lo fa su una connessione diversa da questa (sto usando conn non permanenti) e non ci dovrebbero essere problemi. Si svolge così la cosa o sto toppando. E in questo caso il tutto si può risolvere inserendo un id creato casualmente invece che affidarsi ad un autoincrementale. Voi che ne dite?

  2. #2
    last_insert_id è sicura? Si.
    Quel valore che si ottiene è realmente legato all'ultima query effettuata dall'utente corrente.

  3. #3
    dall'utente? in questo caso non credo sia attendibile...Diciamo dalla pagina corrente?

  4. #4
    Originariamente inviato da V1RuZ
    dall'utente? in questo caso non credo sia attendibile...Diciamo dalla pagina corrente?
    per utente mysql devi intendere il resource id rilasciato da mysql_connect.

    Se lo ometti, ti da l'id generato dall'ultima connessione che ha prodotto un id autoincrement.

    Quindi:

    $conn = mysql_connect (bla,bla)

    poi

    mysql_query($query_insert,$conn);

    quindi:

    $id = mysql_insert_id($conn);

    e sei sicuro di non sbagliare, sara' proprio il tuo.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  5. #5

  6. #6
    Originariamente inviato da piero.mac
    per utente mysql devi intendere il resource id rilasciato da mysql_connect.

    Se lo ometti, ti da l'id generato dall'ultima connessione che ha prodotto un id autoincrement.
    ...
    Non è esatto: se si omette il resource id rilasciato da mysql_connect verrà considerato l'ultimo resource id prodotto dall'utente corrente (nel senso della richiesta che apache fa al database che è distinguibile dalle altre richieste concorrenti):
    Prova a far girare queste righe lanciandole da più istanze del browser e te ne accorgerai. Anche senza specificare l'id, se in una pagina apri una sola connessione al db, mysql_insert_id funziona alla perfezione.
    codice:
    <?
    $dbcnx = mysql_connect('localhost','root','');
    mysql_select_db('gifa',$dbcnx);
    $resource = mysql_query("insert into foo set test = 'asd'",$dbcnx);
    sleep(5);
    echo mysql_insert_id();
    ?>

  7. #7
    Originariamente inviato da Gianni_T
    Non è esatto: se si omette il resource id rilasciato da mysql_connect verrà considerato l'ultimo resource id prodotto dall'utente corrente (nel senso della richiesta che apache fa al database che è distinguibile dalle altre richieste concorrenti):
    Prova a far girare queste righe lanciandole da più istanze del browser e te ne accorgerai. Anche senza specificare l'id, se in una pagina apri una sola connessione al db, mysql_insert_id funziona alla perfezione.
    codice:
    <?
    $dbcnx = mysql_connect('localhost','root','');
    mysql_select_db('gifa',$dbcnx);
    $resource = mysql_query("insert into foo set test = 'asd'",$dbcnx);
    sleep(5);
    echo mysql_insert_id();
    ?>
    Anche se ci metti sleep(una_vita)...

    mysql conosce lo user a cui associa un resource id. Fai girare lo stesso script da tre browser in contemporanea, per mysql e' stesso user con tre id resuorce (user stabilito in mysql_connect), e poi mi posti il risultato. Anzi no... lo conosco gia'.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8
    quarda che l'ho fatto prima di postare...
    restituiscono l'id corretto, provare per credere.

  9. #9
    inoltre, dal sito di MySQL si legge che:
    The value of mysql_insert_id() is affected only by statements issued within the current client connection. It is not affected by statements issued by other clients.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.