Archief - PHP/MySQL: volgende autoindex

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Freakshow

Legacy Member
achter wa intensief zoekwerk is de oplossing er toch gekomen (uiteindelijk uit de code van phpmyadmin gehaald :p )
kan mss nog nuttig zijn voor iemand anders:
PHP:
$query_next_id = mysql_query("SHOW TABLE STATUS LIKE 'tabel_naam'");
$fetch_next_id = mysql_fetch_array($query_next_id);
$next_id = $fetch_next_id['Auto_increment'];

$next_id is dus de int van de volgende autoindex

BertG

Legacy Member
als je nu gewoon telkens een waarde bijhoud als auto index, is dat ook zeer handig :)

dJeez

Legacy Member
Freakshow zei:
$next_id is dus de int van de volgende autoindex
Neen, ttz je mag er niet vanuitgaan dat die waarde correct is. Er kan nl. nèt een fractie van een seconde nadat je die query hebt uitgevoerd iemand anders een nieuwe record aan je tabel toegevoegd hebben, waardoor je $next_id dus niet meer "de volgende waarde" bevat.

Waar heb je het eigenlijk voor nodig?

zero2one

Legacy Member
Er kan nl. nèt een fractie van een seconde nadat je die query hebt uitgevoerd iemand anders een nieuwe record aan je tabel toegevoegd hebben, waardoor je $next_id dus niet meer "de volgende waarde" bevat.

als je dit nodig hebt om een nieuwe insert te doen (bvb relaties tussen tabellen) dan ben je beter het volgende doen:

1. nieuwe data wegschrijven in de hoofdtabel (zonder een id te willen invoegen die wordt toch al (auto increment) aangemaakt
2. de id ophalen van die insert door net na uw insert query volgende regel in te planten:
PHP:
$insertid = mysql_insert_id();
3. de ander waarden in de andere tabellen weg te schrijven met als link uwen net opgehaalden id

Freakshow

Legacy Member
dJeez zei:
Neen, ttz je mag er niet vanuitgaan dat die waarde correct is. Er kan nl. nèt een fractie van een seconde nadat je die query hebt uitgevoerd iemand anders een nieuwe record aan je tabel toegevoegd hebben, waardoor je $next_id dus niet meer "de volgende waarde" bevat.

Waar heb je het eigenlijk voor nodig?
idd heb je gelijk in, maar der is maar 1 admin, dus de waarde zou altijd correct moeten zijn aangezien er niemand anders ondertussen een nieuwe item kan toevoegen.

waarvoor ik het nodig heb:
er moeten foto's geupload worden en moeten de naam van het ID hebben. In normale omstandigheden kom je het id enkel te weten na de INSERT, maar op die manier gaat da ni, want de INSERT gebeurt enkel als alle foto's correct geupload zijn.

Khad nog een andere manier die met een grootere zekerheid gaat gaan werken, maar kvond het nogal een omslachtige manier.
Dus ik zou dan eerst de INSERT doen -> id opvragen, en images uploaden (zo is het 100% zeker dat id correct is) en als er een fout gebeurd tijdens het uploaden -> row terug verwijderen, en dan met ALTER TABLE de autoindex weer gaan verlagen met 1.

Freakshow

Legacy Member
k na het lezen van de comments ben ik toch nog op een betere manier gekomen :p

- row gaan toevoegen (zonder data) zo weten we het ID
- foto's uploaden adhv dat ID
- en ipv INSERT te gebruiken, gewoon die row met dat ID nr gaan updaten

eventueel kan ik nog voor het toevoegen van die row es de tabel gaan checken op lege rijen en deze dan verwijderen.

damn, wrom was ik daar niet eerder op gekomen :doh:
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan