Newsgroup: it.comp.www.php
Titolo: come intercettare la chiave primaria?

cari voi,
con questa istruzione
$archivia = mysql_query("INSERT INTO utenti (idUtente,nome,cognome) VALUES
(null,'$nome','$cognome')");
inserisco dati in una tabella nella quale idUtente è chiave primaria
autoincrementata.
Domanda: come faccio a farmi dire quale idUtente è stato generato al momento
dell'inserimento?
Non posso fare una successiva richiesta come questa
$richiedi = mysql_query("SELECT idUtente FROM utenti WHERE nome='$nome' AND
cognome='$cognome'");
perché una eventuale omonimia mi fregherebbe.
grazie
nico

 perché una eventuale omonimia mi fregherebbe.
con SELECT MAX(idUtente) where....

> con SELECT MAX(idUtente) where....
grazie, ottima dritta.
nico

> con SELECT MAX(idUtente) where....
ma se per sbaglio un altro utente ne inserisce uno nuovo tra il tuo 
inserimento e la tua select max() ti si sballa tutto il db.
Conviene usare le sequenze e prelevare il id_utente PRIMA  di effettuare 
l'inserimento nel db.
ciao
Mauro

 dell'inserimento?
Subito dopo la query:
$idUtente=mysql_insert_id();
-- 
Raffaele Masi
www.webmasterfirenze.it

 $idUtente=mysql_insert_id();
grazie lello!
baci
nico

 l'inserimento nel db.
in che modo?

 $idUtente=mysql_insert_id();
interessante funzione (che non conoscevo)
ma ti faccio una domanda visto che il manuale in merito è un po' ambiguo:
"mysql_insert_id Ottiene l'identificativo generato dalla precedente
operazione INSERT"
ma la precedente... come?
1 - precedente nel db?
2 - precedente usando la stessa connessione?
3 - precedente ... nel sorgente? =_=
1 - puo' dare adito ad errori (ovviamente)
2 - in un programma con fork e condivisione della connessione, come sopra
3 - bah, non mi sembra avere senso....
una soluzione potrebbe essere quella di lock-are la tabella in casi come
questo.

 3 - precedente ... nel sorgente? =_=
Ti suggerisco di iniziare leggendo il manuale ufficiale di MySQL:
http://dev.mysql.com/doc/refman/5.0/en/mysql-insert-id.html
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.
-- 
Vuoi distribuire il tuo sito web su CD/DVD?
Prova 
http://www.dwebpro.com/
Vuoi diventare un esperto analista PHP/MySQL?
Vieni a fare uno stage con noi: 
http://www.creativepark.it/stage/

dell'inserimento?
Nel caso di MySQL, c'e' l'istruzione specifica last_insert_id().
Nel caso generico l'unico sistema pratico e' fare un primo inserimento
usando un nome e un cognome fasulli ma unici, recuperare l'ID, per poi
modificare il record con un UPDATE.
Dato che e' un sistema goffo, quasi tutti i RDBMS hanno introdotto dei
sistemi per aggirarlo e fare prima; ma, in genere, ciascuno ha fatto a
modo suo.
Poi c'e' da considerare che, in genere, la tabella Utenti non dovrebbe
avere collisioni. Se non nome e cognome, avrai username o email che e'
univoca. Due utenti diversi che si distinguono solo per idUtente, a me
fanno sentire nell'aria odore di disastro incombente :-)
Leonardo che pero' e' notoriamente pessimista
-- 
The stars have not dealt me the worst they could do:
My pleasures are plenty - my troubles are two.
But oh!, my two troubles, they reave me of rest:



si bhe un utente si può identificare anche da un ID (chiedendo di
inserire ID e  password)(o ID e PIN) ma non è il mi sembra il massimo,
meglio nome utente e password o email e password
ma la chiave primaria è usata anche copme chiave esterna di altre
tabelle e la chiave esterna deve essere la più picola possibile, se la
chiave primaria (o esterna rispetto ad altre tabelle) è piccola
possiamo metrtere la stessa informazione in molto meno spazio. (GB
intendo) e le ricerche diventano più veloci (meno secondi di
impiegamento del processore, disco, ram, non solo x la latenza)quindi
recuperare l'ID tramite la funzione PHP suddetta mi sembra il più
sensato per compilare altre tabelle con la chiave esterna IDUtente, e
non usare Username, troppo grande 12 byte contro 4 o 8byte
ciao gabry
spero di essere stato utile
Gabriele Fantoni
webmaster di 
www.fantogame.it
P. S. in università informatica, coros us database: chiave primaria
(Codice fiscale).
La cosa non mi semnbrea di dattica non solo perchè grande 16 caratteri
(va bene 1 byte = carattere) (ma sono sempre 16 byte a codice
fiscale)
anche perchè non sempre esiste: l'ID si crea da solo ed esiste con uin
dato, ma provate a ottendere il codice fiscale di  una merce o di una
località o di qualunqualtro che non sia una persona, l'ID non esiste
ma lo si può creare ad HOC
spero di nn essere stato troppo prolisso