Tervehdys!
Ongelmani koskee mysqlin auto_increment arvoa.
Käytän sitä rivien id sarakkeessa ja olisi tarvetta saada selville
uuden rivin tuleva arvo mitä ollaan vasta lisäämässä.
Olen miettinyt ratkaisua mm. siten että hakisi id-kentän suurimman arvon
ja lisäisi siihen yhden mutta tämähän ei toimisi oikein mikäli viimeisin rivi olisi poistettu.
Googlettelulla olen saanut vain pääni kipeäksi joten käännyimpä taas
ohjelmointiputkan asiantuntevan porukan apuun!
Onko tähän olemassa jo valmista funktiota vai mikä olisi luotettava ratkaisu?
Kiittäen
-t0ll0
Kerrotko vielä, miksi kyseinen arvo tarpeen ennen suoritusta? Saat sen selville tietty hakemalla SELECT MAX(id) FROM taulu; ja lisäämällä tähän numeron 1. Kyselyn ajon jälkeen id on selvillä mysql_insert_id() funktiolla.
Ajatuksessasi on yksi vakava virhe. Kuvitellaanpa seuraavaa tilannetta, jossa käyttäjät A ja B käsittelevät tietokantaa samaan aikaan:
A selvittää uuden id:n, 123.
B selvittää uuden id:n, 123.
B lisää kantaan rivin, id:ksi tulee 123.
A lisää kantaan rivin, id:ksi tulee 124.
Huomannet ongelman. Tämän takia uusi id pitää selvittää aina vasta lisäyksen jälkeen (esim. funktiolla mysql_insert_id).
Metabolix
Tuota ongelmaa olin kyllä myös miettinyt, mutta jostain syystä ei ollut ajatuksissani kirjoittaessani viestiä!
Tutkin tuota mysql_insert_id funktiota.
Kiitoksia vastanneille!
---
Loistavaa!
mysql_insert_id toimii mainiosti koodissani.
Kiitoksia vielä kerran.
-t0ll0
Toimiiko mysql_insert_id jos joku onnistuu välissä tekemään tietokantakyselyn:
A lisää tietokantaan jotain
B lisää tietokantaan jotain
A pyytää viimeisimmän id:n, joka on B:n lisäämä, eli väärä
Tähän on toki aika olemattomat mahdollisuudet, koska tuo funktio pitäisi suorittaa heti tietokantakyselyn jälkeen.
punppis kirjoitti:
Toimiiko mysql_insert_id jos joku onnistuu välissä tekemään tietokantakyselyn?
Mitään ongelmaa ei ole, koska mysql_insert_id palauttaa nimenomaan kyseisellä tietokantayhteydellä (mysql_connect jne.) lisätyn rivin id:n.
Aihe on jo aika vanha, joten et voi enää vastata siihen.