[php][mysql] volgende auto insert id

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Gods Lonely Man
  • Registratie: April 2002
  • Laatst online: 19-02-2024

Gods Lonely Man

A sidekick's sidekick

Topicstarter
zou iemand me kunnen vertellen hoe ik de volgende auto-insert id uit een mysql database kan halen?

ik weet wel van het bestaan van deze functie:
http://www.mysql.com/doc/m/y/mysql_insert_id.html

maar deze geeft elke keer gewoon de waarde 0 terug :?

ik heb ook geprobeerd aan "SELECT max(id) FROM table" maar als de vorige id (bijv 8) word verwijderd, dan is de hoogste id uit de database dus 7. maar de volgende auto_insert_id word dan 9, dus dat loopt scheef dan |:(

ik heb eerlijk waar gezocht op het forum en stel andere sites maar kan geen oplossing vinden. sorry als ik een stomme vraag stel 8)7 |:(

It was that kind of a crazy afternoon, terrifically cold, and no sun out or anything, and you felt like you were disappearing every time you crossed a road.

If it weren't for Carbon-14, I wouldn't date at all.


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:32
Je moet eerst iets toevoegen, en dan kan je mbhv die functie het id terugkrijgen van het net geinserte record.
Je hoeft zelf niet op te geven wat het id moet zijn.
Je moet gewoon je insert als volgt schrijven:
code:
1
insert into tabel (veld, veld1) values ('blaat', 'blaat')

Het ID-veld specifieer je dus NIET in je insert statement.

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 16:28

Bosmonster

*zucht*

Precies.. je kunt er ook niet vanuit gaan dat MySQL de eerst volgende neemt (in praktijk in principe wel, maar daar mag je applicatie zich niet op baseren).

Beter is dus eerst het ene record toe voegen, met mysql_insert_id() de ID op te vragen en dan weer verder te gaan met die ID :) Dan weet je zeker dat je de juiste hebt.

Acties:
  • 0 Henk 'm!

  • Gods Lonely Man
  • Registratie: April 2002
  • Laatst online: 19-02-2024

Gods Lonely Man

A sidekick's sidekick

Topicstarter
true, maar ik heb het id nodig om een naam aan een plaatje te geven zodat het plaatje uniek is (en te delete is met een id nummer)

misschien had ik het eerder moeten zeggen :$
waarschijnlijk is daar een betere oplossing voor dan met een id maar dit leek me zo makelijk

It was that kind of a crazy afternoon, terrifically cold, and no sun out or anything, and you felt like you were disappearing every time you crossed a road.

If it weren't for Carbon-14, I wouldn't date at all.


Acties:
  • 0 Henk 'm!

  • thomaske
  • Registratie: Juni 2000
  • Laatst online: 17-09 07:55

thomaske

» » » » » »

Verder is het totaal niet relevant watvoor nummertje je aan je rij hebt hangen. Het is puur om de rij te identificeren, verder niets!

Als dat wel het geval is, dan moet je het niet oplossen met een auto_increment, maar met een eigen 'sequence systeempje'

[edit]
PsychoBoy schreef op 03 juni 2003 @ 11:49:
true, maar ik heb het id nodig om een naam aan een plaatje te geven zodat het plaatje uniek is (en te delete is met een id nummer)

misschien had ik het eerder moeten zeggen :$
waarschijnlijk is daar een betere oplossing voor dan met een id maar dit leek me zo makelijk
Dan is een auto_increment een prima oplossing! Maar dan moet je niet denken dat het 'scheef' loopt, want dat is niet van toepassing.. ;)

[ Voor 53% gewijzigd door thomaske op 03-06-2003 11:51 ]

Brusselmans: "Continuïteit bestaat niet, tenzij in zinloze vorm. Iets wat continu is, is obsessief, dus ziekelijk, dus oninteressant, dus zinloos."


Acties:
  • 0 Henk 'm!

  • zeroxcool
  • Registratie: Januari 2001
  • Laatst online: 04-09 19:14
insert into table (id, variable) values (NULL, 'value');

Kan natuurlijk ook...

zeroxcool.net - curity.eu


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

PsychoBoy schreef op 03 June 2003 @ 11:49:
true, maar ik heb het id nodig om een naam aan een plaatje te geven zodat het plaatje uniek is (en te delete is met een id nummer)

misschien had ik het eerder moeten zeggen :$
waarschijnlijk is daar een betere oplossing voor dan met een id maar dit leek me zo makelijk
Maar kan je niet eerst de insert doen en dan pas het plaatje renamen?

't Is niet de netste oplossing, dat klopt, maar wellicht wel redelijk werkbaar.
Verder zie ik het nut niet zo van een plaatje een naam geven, heeft het die niet allang? :)

Acties:
  • 0 Henk 'm!

  • Gods Lonely Man
  • Registratie: April 2002
  • Laatst online: 19-02-2024

Gods Lonely Man

A sidekick's sidekick

Topicstarter
nou ik heb dat nummertje nodig om me geuploaden plaatjes een naam te geven (en ook de path+naam in de database zetten)

maar eigen 'sequence systeempje' klinkt ook interessant :)
max(id)+ 1 invoeren word dat dan denk ik?

It was that kind of a crazy afternoon, terrifically cold, and no sun out or anything, and you felt like you were disappearing every time you crossed a road.

If it weren't for Carbon-14, I wouldn't date at all.


Acties:
  • 0 Henk 'm!

  • whoami
  • Registratie: December 2000
  • Laatst online: 16:32
Dat moet je eens proberen als meerdere users je applicatie gaan gebruiken.....

https://fgheysels.github.io/


Acties:
  • 0 Henk 'm!

  • Gods Lonely Man
  • Registratie: April 2002
  • Laatst online: 19-02-2024

Gods Lonely Man

A sidekick's sidekick

Topicstarter
ACM schreef op 03 June 2003 @ 11:52:
[...]

Maar kan je niet eerst de insert doen en dan pas het plaatje renamen?

't Is niet de netste oplossing, dat klopt, maar wellicht wel redelijk werkbaar.
Verder zie ik het nut niet zo van een plaatje een naam geven, heeft het die niet allang? :)
uiteraard heeft het plaatje een naam O-)
maar als ik een rij verwijder dan gebruik ik daar een id voor. en het is wel makkeiljk als ik dat plaatje wat er bij hoort ook kan verwijderen met die id :)
(en die heeft het id ook om uniek te zijn)

It was that kind of a crazy afternoon, terrifically cold, and no sun out or anything, and you felt like you were disappearing every time you crossed a road.

If it weren't for Carbon-14, I wouldn't date at all.


Acties:
  • 0 Henk 'm!

  • Kwai_gon_jinn
  • Registratie: Januari 2001
  • Niet online

Kwai_gon_jinn

[-geen icon-]

je kan ook 2 query's er naar toe gooien wat ineffectief is..
je haalt met de eerste query het "laatste toegevoegde" id op
en verhoog je het met 1
met de tweede query stop je met bij behorende data in de databeest :7

maar waarom geen auto_increment? je hebt altijd unique id's je krijgt misschien wellis waar gaps in je id nummering maar dat hindert niet in je opzet... iig na aanleiding van je 2e post

Confucius said: "In ancient time, learning was for self. Nowadays learning is for others."


Acties:
  • 0 Henk 'm!

  • narotic
  • Registratie: Maart 2002
  • Laatst online: 02-11-2021
Ik weet niet helemaal zeker of dit is wat je zoekt, maar zo heb ik wel op een site het probleem opgelost wat jij schetst, dus een plaatje aan een ID verbinden.

Eerst een record in de database schrijven. Daarna direct mysql_insert_id() in PHP aanroepen ( http://nl2.php.net/mysql_insert_id ). Plaatje daarnaar renamen en klaar. Denk dat je je erg veel moeite kan besparen.

En je kan er denk ik zeker wel van uitgaan dat de volgende 1 hoger is dan de hoogste waarde die nu in de auto_increment kolom voorkomt.

- = Step Into The Pit | Industrial Strength = -


Acties:
  • 0 Henk 'm!

Verwijderd

Om de volgende auto-index te bepalen:

PHP:
1
2
3
4
5
$sql = "SHOW TABLE STATUS LIKE 'tabelnaam'";
$resultaat = mysql_query($sql);
$record = mysql_fetch_array($resultaat);

echo "Volgende key is: "  . $record['Auto_increment'];

Acties:
  • 0 Henk 'm!

  • Gods Lonely Man
  • Registratie: April 2002
  • Laatst online: 19-02-2024

Gods Lonely Man

A sidekick's sidekick

Topicstarter
okee dan maar een tweede query er achter aan gooien en het plaatje hernoemen :)
heel erg slodig geloof ik, maar er word maar door 1 persoon te gelijk gebruik gemaakt om de producten in te voeren dus wat maakt het uit })
narotic schreef op 03 June 2003 @ 11:58:

En je kan er denk ik zeker wel van uitgaan dat de volgende 1 hoger is dan de hoogste waarde die nu in de auto_increment kolom voorkomt.
nee dat liep zelf al spaak tijdens het testen |:(


thx guys :>

It was that kind of a crazy afternoon, terrifically cold, and no sun out or anything, and you felt like you were disappearing every time you crossed a road.

If it weren't for Carbon-14, I wouldn't date at all.


Acties:
  • 0 Henk 'm!

  • Gods Lonely Man
  • Registratie: April 2002
  • Laatst online: 19-02-2024

Gods Lonely Man

A sidekick's sidekick

Topicstarter
Verwijderd schreef op 03 juni 2003 @ 12:04:
Om de volgende auto-index te bepalen:

PHP:
1
2
3
4
5
$sql = "SHOW TABLE STATUS LIKE 'tabelnaam'";
$resultaat = mysql_query($sql);
$record = mysql_fetch_array($resultaat);

echo "Volgende key is: "  . $record['Auto_increment'];
_/-\o_ _/-\o_ _/-\o_

It was that kind of a crazy afternoon, terrifically cold, and no sun out or anything, and you felt like you were disappearing every time you crossed a road.

If it weren't for Carbon-14, I wouldn't date at all.


Acties:
  • 0 Henk 'm!

Verwijderd

En je kan er denk ik zeker wel van uitgaan dat de volgende 1 hoger is dan de hoogste waarde die nu in de auto_increment kolom voorkomt.
Dat kun je dus zeker niet. Zoals al eerder geschetst is: je voegt wat toe (krijgt ID 7), je verwijderd het. Het hoogste ID in de tabel is nu 6, maar de volgende auto_inc waarde is 8. Deze kans is te groot om zomaar te verwaarlozen.

Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

PsychoBoy schreef op 03 June 2003 @ 11:56:
uiteraard heeft het plaatje een naam O-)
maar als ik een rij verwijder dan gebruik ik daar een id voor. en het is wel makkeiljk als ik dat plaatje wat er bij hoort ook kan verwijderen met die id :)
(en die heeft het id ook om uniek te zijn)
En je kan niet de naam van het plaatje in het record zetten, ipv het plaatje te hernoemen ?

Acties:
  • 0 Henk 'm!

  • vargo
  • Registratie: Januari 2001
  • Laatst online: 15-09 15:04
Moet je eigenlijk niet met een stored procedure werken? Want kan het (theoretisch) niet zo zijn dat tussen het opvragen van de auto_inc en het gebruik ervan er toch bijv. een row aan de dbase wordt toegevoegd?

Acties:
  • 0 Henk 'm!

  • Banpei
  • Registratie: Juli 2001
  • Laatst online: 25-10-2022

Banpei

Hachiroku on this touge?

Verwijderd schreef op 03 juni 2003 @ 12:04:
Om de volgende auto-index te bepalen:

PHP:
1
2
3
4
5
$sql = "SHOW TABLE STATUS LIKE 'tabelnaam'";
$resultaat = mysql_query($sql);
$record = mysql_fetch_array($resultaat);

echo "Volgende key is: "  . $record['Auto_increment'];
Kan eventueel natuurlijk ooit fout gaan als net iemand tegelijkertijd een plaatje upload. :P

AE86 gevonden! | So what I thought I'd do was, I'd pretend to be one of those deaf-mutes.


Acties:
  • 0 Henk 'm!

Verwijderd

vargo schreef op 03 June 2003 @ 12:37:
Moet je eigenlijk niet met een stored procedure werken? Want kan het (theoretisch) niet zo zijn dat tussen het opvragen van de auto_inc en het gebruik ervan er toch bijv. een row aan de dbase wordt toegevoegd?
Dat los je met een stored procedure (die mysql nog niet aan boord heeft) niet op.
In principe wel door het geheel in een transactie te verpakken (innodb tabel ipv MyIsam)
Maar de kans op een concurerende insert in de tijdsspannne die zit tussen het uitvoeren van twee regels php code is wel erg theoretisch.

Acties:
  • 0 Henk 'm!

  • TheRebell
  • Registratie: Oktober 2000
  • Laatst online: 16-09 06:34
gaat dus wel. Kijk maar eens goed naar de functie, dan zie je dat je het resource_id kunt meegeven... mysql weet dan welke query jij daar bedoelt....

Ik doe het altijd via een insert en dan het auto_increment opvragen (mysql_insert_id())

Acties:
  • 0 Henk 'm!

  • DizzyWeb
  • Registratie: Februari 2001
  • Laatst online: 05-09 14:30

DizzyWeb

Ondertiteld

Dan heb je de VORIGE id, niet de VOLGENDE ;)

Acties:
  • 0 Henk 'm!

  • TheRebell
  • Registratie: Oktober 2000
  • Laatst online: 16-09 06:34
DizzyWeb schreef op 04 June 2003 @ 00:33:
Dan heb je de VORIGE id, niet de VOLGENDE ;)
ja en?! de topicstarter wil het id hebben voor het plaatje, nou dat kan dan toch. Insert en id opvragen, plaatje renamen en klaar :)

Acties:
  • 0 Henk 'm!

  • cybermans
  • Registratie: Maart 2001
  • Laatst online: 17-09 09:56
als giggantische luie zak geef ik niet eens id mee omdat mysql zelf dat doet. dit komt doordat ik auto_increment heb aanstaan

wat ook kan is SELECT id FROM eenofanderetabel ORDER BY id DESC LIMIT 1
en dan is het id wat er overblijft je laatste gebruikte id en dan tel je er een bij op.

maar ja wel weer een beetje basic (ben wel goed voor deze wereld en nu ga ik naar bed)

Strava | Runkeeper | Endomondo (mijn leikr uploads)


Acties:
  • 0 Henk 'm!

  • ripexx
  • Registratie: Juli 2002
  • Laatst online: 17-09 20:52

ripexx

bibs

Zoals al eerder vermeld is kan je het risico lopen dat je net de laatste hebt gedelete dus:
zodra je bijvoorbeeld zeven records hebt en je insert een achtste, je bedenkt je en delete het record. Wanneer je jouw method gebruikt geef jij aan dat de next id 8 is terwijl mysql 9 zal toekennnen ;)

De oplossing van RobinVR is wel netjes maar heeft nog een risico bij simultaan schrijven van en naar. Hoewel deze kans natuurlijk erg klein is. Omdat je deze query's bijna direct na elkaar zal aanroepen binnen een script. 8)

buit is binnen sukkel


Acties:
  • 0 Henk 'm!

Verwijderd

heel handig php alleen als er meerdere tegelijk gaan gaat het fout.
kan iemand mij vertellen waarom
"INSERT INTO tabel (id) VALUES (max(id)+'1')" niet werkt ??

[ Voor 11% gewijzigd door Verwijderd op 04-06-2003 07:31 ]


Acties:
  • 0 Henk 'm!

  • Gods Lonely Man
  • Registratie: April 2002
  • Laatst online: 19-02-2024

Gods Lonely Man

A sidekick's sidekick

Topicstarter
Verwijderd schreef op 04 juni 2003 @ 07:22:
heel handig php alleen als er meerdere tegelijk gaan gaat het fout.
kan iemand mij vertellen waarom
"INSERT INTO tabel (id) VALUES (max(id)+'1')" niet werkt ??
ik heb ook geprobeerd aan "SELECT max(id) FROM table" maar als de vorige id (bijv word verwijderd, dan is de hoogste id uit de database dus 7. maar de volgende auto_insert_id word dan 9, dus dat loopt scheef dan

It was that kind of a crazy afternoon, terrifically cold, and no sun out or anything, and you felt like you were disappearing every time you crossed a road.

If it weren't for Carbon-14, I wouldn't date at all.


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

Verwijderd schreef op 04 June 2003 @ 07:22:
heel handig php alleen als er meerdere tegelijk gaan gaat het fout.
kan iemand mij vertellen waarom
"INSERT INTO tabel (id) VALUES (max(id)+'1')" niet werkt ??
Hoe moet mysql nou weer weten wat de max van id is op dat moment?

Sowieso is mysql gewoon niet transaction save zolang je geen innodb hebt, dus zelfs met jouw bovenstaande query is er geen garantie dat het goed gaat.

Ook weet je in zo'n geval achteraf niet wat nou het resutlaat werd...

Acties:
  • 0 Henk 'm!

  • narotic
  • Registratie: Maart 2002
  • Laatst online: 02-11-2021
Ik snap echt niet waarom je niet gewoon eerst de record in de database schrijft en daarna mysql_insert_id() aan kan roepen. Vervolgens het plaatje naar dat id hernoemen... Persoonlijk zie ik daar niets slordigs aan en het is zo ongeveer de veiligste methode

- = Step Into The Pit | Industrial Strength = -


Acties:
  • 0 Henk 'm!

  • Erkens
  • Registratie: December 2001
  • Niet online

Erkens

Fotograaf

Verwijderd schreef op 04 juni 2003 @ 07:22:
heel handig php alleen als er meerdere tegelijk gaan gaat het fout.
kan iemand mij vertellen waarom
"INSERT INTO tabel (id) VALUES (max(id)+'1')" niet werkt ??
INSERT INTO tabel (id) SELECT max(id)+1 FROM tabel

[ Voor 7% gewijzigd door Erkens op 06-06-2003 13:30 ]

Pagina: 1