Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    117

    Utilizzo di mysql_insert_id() e di "SELECT LAST_INSERT_ID()"

    Ciao a tutti
    avendo bisogno di ottenere l'Id dell'insert che ho appena effettuato ho consultato la guida php-mysql ed ho trovato le due istruzioni indicate nel titolo.

    Solo che i risultati che ottengo non coincidono con quanto ho trovato nella guida perché ho letto:
    Avviso mysql_insert_id() converte il tipo restituito dalla funzione nativa dell'API C di MySQL mysql_insert_id() al tipo long (chiamata int nel PHP). Se la colonna AUTO_INCREMENT è del tipo BIGINT, il valore restituito da mysql_insert_id() sarà inesatto. In questo caso si usi la funzione SQL di MySQL LAST_INSERT_ID() in una query SQL.
    Quindi, siccome il mio ID è un "bigint" ho cercato di usare "SELECT LAST_INSERT_ID()".

    Il problema è che invece di restituirmi un numero mi viene fuori qualcosa tipo: "Resource id #5" dove inoltre il numero finale non è quello dell'Id inserito.

    Al contrario se uso mysql_insert_id() mi viene restituito il numero giusto ma, dato l'avviso di non utilizzare questa istruzione, non credo di poterci fare affidamento.

    Insomma sono in un vicolo cieco e non so cosa fare

    Accetto qualsiasi suggerimento.
    Grazie in anticipo


    Edit:
    Ma se usassi mysqli_insert_id potrei superare il problema del bigint?

    Per usare mysqli_insert_id devo riscrivere il tutto il codice php che usa mysql ed usare per tutto mysqli, oppure posso "infilare" l'istruzione mysqli_insert_id nel contesto in cui uso il vecchio mysql?

    Grazie ancora
    Ultima modifica di genespos; 18-11-2014 a 13:20 Motivo: Ulteriori chiarimenti

  2. #2
    Quote Originariamente inviata da genespos Visualizza il messaggio
    Ciao a tutti
    avendo bisogno di ottenere l'Id dell'insert che ho appena effettuato ho consultato la guida php-mysql ed ho trovato le due istruzioni indicate nel titolo.

    Solo che i risultati che ottengo non coincidono con quanto ho trovato nella guida perché ho letto:


    Quindi, siccome il mio ID è un "bigint" ho cercato di usare "SELECT LAST_INSERT_ID()".

    Il problema è che invece di restituirmi un numero mi viene fuori qualcosa tipo: "Resource id #5" dove inoltre il numero finale non è quello dell'Id inserito.

    Al contrario se uso mysql_insert_id() mi viene restituito il numero giusto ma, dato l'avviso di non utilizzare questa istruzione, non credo di poterci fare affidamento.

    Insomma sono in un vicolo cieco e non so cosa fare

    Accetto qualsiasi suggerimento.
    Grazie in anticipo


    Edit:
    Ma se usassi mysqli_insert_id potrei superare il problema del bigint?

    Per usare mysqli_insert_id devo riscrivere il tutto il codice php che usa mysql ed usare per tutto mysqli, oppure posso "infilare" l'istruzione mysqli_insert_id nel contesto in cui uso il vecchio mysql?

    Grazie ancora
    ciao,

    per ovviare al problema basta che scrivi:
    codice:
    SELECT MAX(ID) FROM tabella
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    117
    Ciao Bomberdini
    grazie della risposta.

    Purtroppo non credo di poter usare quel sistema perché se si verificano inserimenti accavallati mi viene restituito un id sbagliato.

    P.S.

    Al momento ho modificato il codice utilizzando mysqli e sembra funzionare ma vorrei qualche rassicurazione ... da qualcuno più esperto
    Ciao a tutti

  4. #4
    last_insert_id() o analoghi restituiscono l'ultimo id (autoincrement) inserito. Quindi l'equivalente di MAX()

    inglobba il codice in una transazione cosi stai tranquillo riguardo a insert multipli
    Non si può risolvere un problema usando lo stesso modo di pensare che ha creato quel problema.
    Albert Einstein

    Siate Affamati, siate Folli, siate Onesti e siate Generosi

  5. #5
    Utente di HTML.it
    Registrato dal
    May 2013
    Messaggi
    117
    Voglio precisare che il rilievo che ho fatto non è farina del mio sacco ma l'ho letto in vari forum (tra cui qui).

    Comunque, dato che, proprio nel link che ho indicato ho letto che vanno utilizzate le istruzioni mysqli perché quelle mysql non verranno mantenute a lungo, penso che utilizzerò quella istruzione, anche perché non ho trovato nessun avviso sulla guida.

    Però prego ancora qualcuno di darmi conforto sul punto ....

    Riciao a tutti

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 © 2025 vBulletin Solutions, Inc. All rights reserved.