[PHP / MySQL] waarde volgende autoincrement opvragen

Pagina: 1
Acties:
  • 164 views sinds 30-01-2008
  • Reageer

Onderwerpen


Acties:
  • 0 Henk 'm!

  • posttoast
  • Registratie: April 2000
  • Laatst online: 16:20
Ik heb hier een stuk PHP waarin ik de volgende autoincrement waarde op wil vragen. Het eerste waar ik aan dacht was deze code:
PHP:
1
2
3
4
$sql = "SELECT max(id) FROM tabel";
$uitvoer = mysql_query($sql) or die (mysql_error());
$next_id = mysql_result($uitvoer, 0) + 1;
echo $next_id;

Dit gaat echter mis wanneer er het volgende gebeurt:

* Voer nieuw record in (krijg bijvoorbeeld id '13')
* Verwijder record met id '13'
* Voer bovenstaande code uit

De uitkomst die je dan krijgt is dus 13 (hoogste waarde = 12, 12 + 1 = 13) terwijl de volgende autoincrement value 14 zal zijn.

De enige oplossing die ik kan bedenken is het niet meer daadwerkelijk verwijderen van records uit de database (middels een extra kolom "status", bijvoorbeeld status = verwijderd). Dit vind ik alleen geen oplossing, het is meer een workaround.

Heeft er iemand wel een echte oplossing?

omniscale.nl


Acties:
  • 0 Henk 'm!

  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

Dit valt volgens mij nooit met zekerheid te achterhalen. Wat als er nou een record ingevoegd wordt nadat jij het max id hebt opgevraagd wordt. Ben ook wel benieuwd waarom je dit zo wilt doen.

Systeem | Strava


Acties:
  • 0 Henk 'm!

  • vriesdude
  • Registratie: Februari 2002
  • Laatst online: 19-09 19:14
mysql_insert_id();

succes

[ Voor 56% gewijzigd door vriesdude op 29-03-2005 15:15 ]

/dev/null


Acties:
  • 0 Henk 'm!

  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

Neen, dat is het id van het laatst geinserte record.

met:
code:
1
SHOW TABLE STATUS


Kan je info van de tabellen opvragen inclusief het volgende auto increment id.

En zo van 1 tabel:
code:
1
SHOW TABLE STATUS FROM site LIKE 'tabelnaam';

[ Voor 11% gewijzigd door Brakkie op 29-03-2005 15:25 ]

Systeem | Strava


Acties:
  • 0 Henk 'm!

  • vriesdude
  • Registratie: Februari 2002
  • Laatst online: 19-09 19:14
Brakkie schreef op dinsdag 29 maart 2005 @ 15:16:
[...]


Neen, dat is het id van het laatst geinserte record.

met:
code:
1
SHOW TABLE STATUS


Kan je info van de tabellen opvragen inclusief het volgende auto increment id.
Dan doet ie toch gewoon mysql_insert_id() + 1 (dat is dan de volgende)...
Ook al kan ik me geen voorbeeld bedenken waarbij het handig is om te gokken wat het volgende id wordt..

/dev/null


Acties:
  • 0 Henk 'm!

  • RuudBurger
  • Registratie: Oktober 2003
  • Laatst online: 20-09 21:38
als je het veld in de query leeg laat plaatst hij automatisch de juiste ID volgens mij..

INSERT INTO `blabla` VALUES ('','hiereending','ennogiets', etc etc..

Acties:
  • 0 Henk 'm!

  • vriesdude
  • Registratie: Februari 2002
  • Laatst online: 19-09 19:14
Sillymidget schreef op dinsdag 29 maart 2005 @ 15:22:
als je het veld in de query leeg laat plaatst hij automatisch de juiste ID volgens mij..

INSERT INTO `blabla` VALUES ('','hiereending','ennogiets', etc etc..
klopt, als het id veld wel de eigenschap auto_increment heeft
vervolgens kun je die waarde weer ophalen met mysql_insert_id

/dev/null


Acties:
  • 0 Henk 'm!

  • Brakkie
  • Registratie: Maart 2001
  • Niet online

Brakkie

blaat

Sillymidget schreef op dinsdag 29 maart 2005 @ 15:22:
als je het veld in de query leeg laat plaatst hij automatisch de juiste ID volgens mij..

INSERT INTO `blabla` VALUES ('','hiereending','ennogiets', etc etc..
Dat zal ie toch wel weten :P

Systeem | Strava


Acties:
  • 0 Henk 'm!

  • posttoast
  • Registratie: April 2000
  • Laatst online: 16:20
Even ter verduidelijking: ik wil dit doen omdat ik een afbeelding op de server wil opslaan met als naam id.jpg. Dat opslaan gebeurt vlak voordat de query voor het opslaan van de rest van de gegevens wordt uitgevoerd.

Overigens:
PHP:
1
2
$jam = mysql_insert_id() + 1;
echo $jam;
Geeft '1'. Dat klopt niet denk ik :)

omniscale.nl


Acties:
  • 0 Henk 'm!

  • mulder
  • Registratie: Augustus 2001
  • Nu online

mulder

ik spuug op het trottoir

Insert dan eerst de query? Id raden is nergens voor nodig

oogjes open, snaveltjes dicht


Acties:
  • 0 Henk 'm!

  • GarBaGe
  • Registratie: December 1999
  • Laatst online: 17:48
Vincent Bovelander schreef op dinsdag 29 maart 2005 @ 15:29:
Even ter verduidelijking: ik wil dit doen omdat ik een afbeelding op de server wil opslaan met als naam id.jpg. Dat opslaan gebeurt vlak voordat de query voor het opslaan van de rest van de gegevens wordt uitgevoerd.
Dan geef je dat plaatje toch een tijdelijke naam en rename je hem achteraf ??
Of je w8 met het opslaan van je plaatje totdat je ID bekend is...

mysql_insert_id() geeft trouwens alleen iets terug als je ook werkelijk net wat ge-insert hebt... (leest een variabele uit)

Edit: en anders moet je de naam van je plaatje niet gelijk maken aan een autoincrement-field, maar neem je daar een aparte kolom voor. Bijvoorbeeld: afbeeldingnaam.

[ Voor 13% gewijzigd door GarBaGe op 29-03-2005 15:34 ]

Ryzen9 5900X; 16GB DDR4-3200 ; RTX-4080S ; 7TB SSD


Acties:
  • 0 Henk 'm!

  • posttoast
  • Registratie: April 2000
  • Laatst online: 16:20
GarBaGe schreef op dinsdag 29 maart 2005 @ 15:33:
[...]

Dan geef je dat plaatje toch een tijdelijke naam en rename je hem achteraf ??
Of je w8 met het opslaan van je plaatje totdat je ID bekend is...
Ik ga het zo doen mensen :)

Ik geloof dat ik iets ingewikkelder aan het denken was dan eigenlijk nodig is :o

Bedankt allemaal in ieder geval!

omniscale.nl


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 14:53

MueR

Admin Tweakers Discord

is niet lief

Vincent Bovelander schreef op dinsdag 29 maart 2005 @ 15:35:
Ik ga het zo doen mensen :)
Ik geloof dat ik iets ingewikkelder aan het denken was dan eigenlijk nodig is :o
offtopic:
Iets? :+

Anyone who gets in between me and my morning coffee should be insecure.

Pagina: 1