Elikkäs, tuli tällainen pikku probleemo taas vastaan, jonka kyllä sain jo ratkaistua, mutta ajattelin vielä kysellä täällä mielipiteitä.
Minulla on kaksi taulu, kutsutaan niitä vaikka nimillä:
Ukkeli-taulu
int laskuri ID varchar nimi
Tietoa-taulu
int laskuri ID int ID_ukkeli varchar tieto
Kun luon tietokantaan Ukkelin, minun pitäisi samalla saada tehtyä myös Tietoa -tauluun Ukkelille liittyvä tietue. Tässä tulee se ongelma vastaan, kun enhän minä voi millään tietää juuri lisätyn ukkelin ID:tä, joka vaaditaan Tietoa-tauluun, vai voinko?
Ratkaisin tuon ongelman toistaiseksi sillä, että minulla on Ukkeli-taulussa myös ominaisuus "lisäysaika", eli voin sen mukaan hakea viimeksi lisätyn ukkelin ja sen mukaan saan juuri lisätyn ukkelin ID:n Tietoa tauluun, joka vaaditaan taulujen yhteyteen.
mysql_insert_id(). Ja kannattaa lukea nuo notesit tuolta kans.
Jeps, eli tuossa on periaatteessa täysin sama idea kuin minunkin koodissa. Ei vain tarvitse tuota ylimääräistä lisäysaika-kenttää Ukkelille.
Siinä vain on sellainen äärimmäisen pieni riski, että jos täysin samaan aikaan joku toinenkin ukkeli luotaisiin, niin viimeisin ukkeli voisi olla väärä. Tämä sama riski on myös tuossa mysql_insert_id:ssä. :/
Hoover kirjoitti:
Tämä sama riski on myös tuossa mysql_insert_id:ssä. :/
Millä perusteella? Et kai sä nyt skriptissä avaamaasi yhteyttä muille lainaa?
Tai no, tuolla helppisivulla ei kyllä sanota ainakaan suoraan moista, mutta kaikissa laadukkaissa systeemeissä mitä olen käyttänyt tuo vastaava antaa viimeisimmän samassa yhteydessä luodun numeron.
MySQL:n dokumentaatiosta "For LAST_INSERT_ID(), the most recently generated ID is maintained in the server on a per-connection basis. It is not changed by another client."
Minun käsittääkseni tuota riskiä ei ole (ainakin mitä noita käyttäjien kommentteja luki) Ja tosiaan kannattaa muistaa tarkistaa mysql_affected_rows()-funktiolla, että rivin lisäys onnistui, muuten tuo palauttaa vain sen viimeisimmän id:n, joka on voitu tallentaa kantaan jo aikoja sitten.
Edit. Hidas....
Joo, siellä kommenteissa oli muuten sellainen omituisuus, että joku sanoi että "jos käytät useampaa yhteyttä, niin luo uusi yhteys jossa kysyt last_insert_id()tä". Ei pitäisi toimia IMO.
Jeps. Pitääpä testailla tuota jossain välissä. On tuo kuitenkin varmaan parempi kuin tuo edellinen kikka.
Aihe on jo aika vanha, joten et voi enää vastata siihen.