Get Next Auto Increment

Door Ruben , 14 jaar geleden, 3.673x bekeken

Dit is een functie waarmee je de volgende auto increment krijgt uit de opgegeven tabel. Als iemand nog feedback heeft hoor ik dat graag.

Groeten,

R. Vandenbussche

Author: Ruben Vandenbussche
Website: http://www.RVandenbussche.nl
Contact: info (at) RVandenbussche (dot) nl
Date: 11 Nov 2008
*******************************************
Script: Get Auto Increment v1.0
It does:
1. Get the next auto increment from the table.

It doesn't:
1. Make a connection with the database it assumes that it allready exists.


Summary:
Getting the next auto increment from the given table ($table) is handy for example giving image names the same name as the auto increment id.

WARNING:
When multiple connections use the same table at the same time the next auto increment value could be wrong.

Gesponsorde koppelingen

PHP script bestanden

  1. get-next-auto-increment

 

Er zijn 20 reacties op 'Get next auto increment'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
M Ypma
M Ypma
13 jaar geleden
 
0 +1 -0 -1
Leuk hoor dat je hier tijd in hebt gestoken.
Maar wanneer denk je dit nodig te hebben? Op het moment dat je deze functie gebruikt is de data al verouderd. Want wat nou als ik als gebruiker iets insert terwijl jij op hetzelfde moment dit id opvraagt. Dan heb ik dat id al in gebruik met mijn insert zonder dat jouw script daarvan op de hoogte is.
Andytjuh Bruggeman
andytjuh Bruggeman
13 jaar geleden
 
0 +1 -0 -1
Ja wat wil je daar tegen doen ?

Maar waarom zet jij alles altijd in het engels ?
of maak je het niet zelf
Jan Koehoorn
Jan Koehoorn
13 jaar geleden
 
0 +1 -0 -1
Een auto increment is uitsluitend van belang voor de interne database, verder nergens voor. Het heeft dus totaal geen zin om de next auto increment value proberen te voorspellen.
Jurgen assaasas
Jurgen assaasas
13 jaar geleden
 
0 +1 -0 -1
En als je query nu eens mislukt dan heb je ongekoppelde data, als je vervolgens dat ID gebruikt in een INSERT/UPDATE query.
RvW Of toch niet
RvW Of toch niet
13 jaar geleden
 
0 +1 -0 -1
dit is wel erg zinloos om te weten..
Robert Deiman
Robert Deiman
13 jaar geleden
 
0 +1 -0 -1
Auto-increment moet je gewoon zijn gang laten gaan.. Bij een insert in meerdere tabellen haal je dat id gewoon op met mysql_insert_id() en die gebruik je voor andere query's die dat id nodig hebben. (bij gebruik van een goede SQL tool is zelfs dat al vaak niet nodig)

Wil je toch tabellen updaten met een bepaald id, dan haal je dat id gewoon op met een query.. Aan de laatste insert_id heb je namelijk verder niets. Een id is een unieke sleutel voor een bepaald gegeven. Wil je dat gebruiken, dan moet je ook weten om welk gegeven dat het gaat.
Arjan Kapteijn
Arjan Kapteijn
13 jaar geleden
 
0 +1 -0 -1
Technisch gezien hoeft een auto increment value niet eens oplopend te zijn, het zou ook gewoon een random nummer kunnen wezen, zolang het maar uniek is.

Niet dat de jongens die databasesoftware schrijven het in hun hoofd halen om zo'n ingewikkelde random-generator toe te passen, maar toch ;).
Onbekend Onbekend
Onbekend Onbekend
13 jaar geleden
 
0 +1 -0 -1
Waarom zou je het volgende autoincrement willen weten?
Klaasjan Boven
Klaasjan Boven
13 jaar geleden
 
0 +1 -0 -1
Tommy,

Om deze te gebruiken in de query??
Frank -
Frank -
13 jaar geleden
 
0 +1 -0 -1
Dit gegeven is volkomen onbetrouwbaar wanneer er meer dan 1 gebruiker gelijktijdig online is. Je kunt in MySQL niet vaststellen wat de waarde van de auto_increment gaat worden, dat is pas áchteraf bekend.

Wil je tóch vooraf een nummer aanmaken, ben je verplicht om een dummy-record aan te maken in de tabel. Dit record kun je dan later weer gaan updaten met de echte data. Of weggooien wanneer het toch niet wordt gebruikt.

In andere databases gebruik je een SEQUENCE, dan kun je vooraf al een nummer opvragen. In PostgreSQL:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT NEXTVAL('naam_van_de_sequence') AS new_id;

MySQL kent dit principe niet, je kunt er dus ook niets mee.
Ruben
Ruben
13 jaar geleden
 
0 +1 -0 -1
Waar ik het voor wil gebruiken is om een plaatje van een artikel dezelfde naam te geven als het id die bepaald wordt door een auto increment. mysql_insert_id() werkt alleen na de insert dat wil ik dus niet want dan zou ik hem dus moeten updaten.

Als dat de enige oplossing is dan moet dat maar.
Ruben
Ruben
13 jaar geleden
 
0 +1 -0 -1
@andy
Mensen die misschien in de toekomst de scripts moeten editen zijn misschien niet engels.

@rvw
Bedankt voor je opbouwende feedback.
Frank -
Frank -
13 jaar geleden
 
0 +1 -0 -1
Je zorgt er wel voor dat niemand anders van de database gebruik kan maken wanneer je met bovenstaande functie bezig bent? Zo niet, dan loop je de kans dat je 2 plaatjes met dezelfde naam gaat aanmaken...
RvW Of toch niet
RvW Of toch niet
13 jaar geleden
 
0 +1 -0 -1
sorry dat ik en beetje kort af was.
maar hier je ken hier gewoon niks mee het principe is verkeerd.

zo als db guru pgFrank aan geeft je kunt er gewoon niks mee.

je zult hier dus echt en andere manier voor moeten zoeken.
--
--
13 jaar geleden
 
0 +1 -0 -1
Maar het staat sowieso nog 10 jaar in de scriptlib. :-)
Ruben
Ruben
13 jaar geleden
 
0 +1 -0 -1
@pgFrank
Is dat mogelijk dat niemand anders op dat moment bij de table komt? Is dat wel handig? Krijgt de ander dan een foutmelding of duurt de query gewoon iets langer?

@Evert
Ik had er even een WARNING bij gezet.
Toby hinloopen
toby hinloopen
13 jaar geleden
 
0 +1 -0 -1
@andy:
ik schrijf comments ook altijd engels...
maar maak ze wel zelf
Frank -
Frank -
13 jaar geleden
 
0 +1 -0 -1
Quote:
Is dat mogelijk dat niemand anders op dat moment bij de table komt?
Ja, zet een LOCK op de tabel.

Quote:
Is dat wel handig?

Nee, het is één van de meest beroerde situaties die je maar kunt bedenken! Een deel van de database wordt hiermee tijdelijk onbruikbaar. Maar je kunt niet anders, anders maak je de data corrupt. En daarmee wordt de boel ook onbruikbaar.
Quote:
Krijgt de ander dan een foutmelding of duurt de query gewoon iets langer?
Je krijgt bij mijn weten een foutmelding, maar dat kan ook afhankelijk zijn van de instellingen van de MySQL-server waar alles op draait.

Kortom, dit wil je niet, bovenstaand scriptje toont aan dat iets in theorie mogelijk is, maar in de praktijk volkomen onbruikbaar is. MySQL kan het niet en dus gaat dit niet lukken op een nette manier. Mocht je toch echt met dit stuk ellende willen werken, je bent een held, ga dan met dummy-records werken die je vervolgens met een UPDATE-query van de juiste data voorziet.

Of bedenk een compleet ander mechanisme voor het toekennen van bestandsnamen. Je zou bv. 1 tabel kunnen maken met daarin uitsluitend een kolom met een autoincrement. Deze hoog je op, je vraagt het id op en gebruikt dit id om elders te gebruiken in bestandsnaam. Verder doe je niets met deze tabel. Krijg je toch een soort van sequence. Zorg er wel voor dat niets of niemand deze tabel kan aanpassen, anders loop je weer risico's dat het fout gaat.
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Ruben
Ruben
13 jaar geleden
 
0 +1 -0 -1
Bedankt voor alle reacties weet ik in ieder geval weer genoeg.

Groeten,

Ruben

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. get-next-auto-increment

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.