[PHP/MySQL] auto_increment | Waarde van een nieuw id VOORAF

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • raps
  • Registratie: April 2003
  • Laatst online: 06-09 19:51
Ik heb gezocht in de manuals van PHP, MySQL, op GoT en Google, maar dit niet kunnen vinden.

Ik heb een tabel, met id's 1,2,3,4. Ik gooi record met id 4 weg en insert er een -> krijgt id 5.
Dit is prima. Nu wil ik alleen weten wat de nieuwe id in een tabel gaat worden, voordat ik een record erin zet.
Ik weet dat ik na het inserten de laatste id kan opvragen: dmv PHP (mysql_insert_id();) of MySQL (SELECT LAST_INSERT_ID() ). Dit is dus allebei NA het inserten van een record.

Als ik SELECT MAX(id) doe krijg ik de hoogste id (wat in het voorbeeld 3 is; id++ wordt 4, maar de id wordt 5), dus dit klopt niet.

Er zijn wel wat workarounds, maar dit gaat ten koste van de performance en is gewoon omslachtig.

Heeft iemand van jullie hier een nette oplossing voor?

Acties:
  • 0 Henk 'm!

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:44

gorgi_19

Kruimeltjes zijn weer op :9

Waarom zou je dat willen weten? Wat wil je uiteindelijk bereiken?

* gorgi_19 wel benieuwd naar het grotere verband. Misschien zijn er andere oplossingen voor. :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


Acties:
  • 0 Henk 'm!

  • Cloud
  • Registratie: November 2001
  • Laatst online: 17-09 10:39

Cloud

FP ProMod

Ex-moderatie mobster

Ik denk dat hij wil zorgen dat al zijn id nummers opvolgend zijn, en er zo weinig mogelijk gaten in de DB komen qua id's. Geen idee hoe je dat slim op kan lossen though, ik kan ook alleen maar omslachtige en performance vretende methoden bedenken :9

Never attribute to malice that which can be adequately explained by stupidity. - Robert J. Hanlon
60% of the time, it works all the time. - Brian Fantana


Acties:
  • 0 Henk 'm!

  • raps
  • Registratie: April 2003
  • Laatst online: 06-09 19:51
Ik wil een bestand uploaden.

Hiervoor wordt deze eerst geupload, gemoved, geresized (als het een plaatjes is) en daarna getest (of het ammal goed gelukt is). Het bestand wordt opgeslagen als 'id.extension'. Als alles gelukt is, wordt er info van dit bestand opgeslagen in de database.

Zoals ik al zei zijn er genoeg alternatieve methodes: bestand naderhand renamen; eerst blanco gegevens in database, na de test een update (dan wel een delete).

Ik loop er vaker tegenaan dat ik wil weten welk id hij gaat krijgen. Ik was benieuwd naar een goede oplossing en kon deze oplossing niet vinden. Vandaar dit topic.

Acties:
  • 0 Henk 'm!

Verwijderd

raps schreef op 28 april 2004 @ 18:06:
bestand naderhand renamen; eerst blanco gegevens in database, na de test een update (dan wel een delete).
Ik denk dat dit de snelste alternatieve methode zal zijn, en zo omslachtig is het toch niet? Ik begrijp heel goed dat je het zou willen testen met een functie of zo welke id het wordt, maar als het zelfs niet bij de MySql-functies op php.net wordt vermeld, dan betwijfel ik het of dat kan.

Maar ik ga wel even zoeken, ben zelf ook erg benieuwd :)

Acties:
  • 0 Henk 'm!

  • raps
  • Registratie: April 2003
  • Laatst online: 06-09 19:51
Ja, zoals ik al zei is het niet zo dat ik ergens vast zit ofzo.
Verwijderd schreef op 28 april 2004 @ 18:12:
[...]
maar als het zelfs niet bij de MySql-functies op php.net wordt vermeld, dan betwijfel ik het of dat kan.
[...]
Het kan ook moeilijk in een php-functie zitten.

Wat ik nu net heb gevonden in de MySQL manual:
http://dev.mysql.com/doc/mysql/en/SHOW_TABLE_STATUS.html

Hier zit de volgende waarde in:
Auto_increment: The next AUTO_INCREMENT value.

Alleen weet ik niet of ik deze met een query kan ophalen...?

[ Voor 24% gewijzigd door raps op 28-04-2004 18:17 ]


Acties:
  • 0 Henk 'm!

  • cameodski
  • Registratie: Augustus 2002
  • Laatst online: 06-11-2023
Het vooraf opvragen van een auto increment lijkt me erg onwenselijk.
Vooral als je daar dan weer logica aan verbindt.

Stel je eens voor dat je dit id hebt opgevraagd en vervolgens gaat een andere user met je zojuist gevonden id aan de haal. Dan komt je toch hopeloos in de problemen.

Zoiets zou je dus niet moeten willen en ook niet moeten kunnen, want het brengt de integriteit van je data ernstig in gevaar.

Never underestimate the power of


Acties:
  • 0 Henk 'm!

  • Creepy
  • Registratie: Juni 2001
  • Nu online

Creepy

Tactical Espionage Splatterer

Waaom je bestand renamen? Waarom niet in je DB een veld voor de bestandsnaam opnemen?

"I had a problem, I solved it with regular expressions. Now I have two problems". That's shows a lack of appreciation for regular expressions: "I know have _star_ problems" --Kevlin Henney


Acties:
  • 0 Henk 'm!

  • Sybr_E-N
  • Registratie: December 2001
  • Laatst online: 12:54
Je het doen via een simpelere query ala:

code:
1
2
3
4
5
$query = 'SHOW TABLE STATUS LIKE \''. $table. '\'';
$result = mysql_query($query);
$row = mysql_fetch_array($result, MYSQL_ASSOC);

$id = $row['Auto_increment'];


Je kunt de query gewoon eens uitproberen en kijken wat voor meuk je terug krijgt. Queries bijten niet hoor, het staat gewoon in de MySQL manual uitgelegt wat je met deze commands kunt doen en wat het allemaal betekend. Kun je zelf bepalen of het voor jouw vanwezelijk belang is.

Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 14:28
Misschien heel logisch hoor maar: waarom kijk je niet eerst of het een afbeelding is? Zo ja voeg je een rij in en neem je mysql_insert_id. Anders doe je dat niet en gaat het bestand verloren.

Mocht het resizen o.i.d. mislukken kun je de rij eventueel nog verwijderen. Maar in principe kan dit niet fout gaan als je al weet dat het een afbeelding is.

Acties:
  • 0 Henk 'm!

  • raps
  • Registratie: April 2003
  • Laatst online: 06-09 19:51
Ja heren,
nogmaals: de alternatieven zijn me bekend.

@ Sybr_E-N
Thanx, dat is inderdaad wat ik bedoel.

@ cameodski
Ja, daar heb je gelijk in. Aangezien het opvragen van de id en het wegschrijven binnen ca 10-20 regels gebeurd heb ik daar niet aan gedacht. Ik zie er dan ook vanaf.

Mijn vraag is beantwoord. Danku.

Acties:
  • 0 Henk 'm!

  • curry684
  • Registratie: Juni 2000
  • Laatst online: 06-09 00:37

curry684

left part of the evil twins

raps schreef op 29 april 2004 @ 01:44:
Ja heren,
nogmaals: de alternatieven zijn me bekend.
Als de logische en functioneel correcte alternatieven je bekend zijn, waarom wil je dan zonodig volharden om de inferieure variant te implementeren?

Professionele website nodig?


Acties:
  • 0 Henk 'm!

  • ACM
  • Registratie: Januari 2000
  • Niet online

ACM

Software Architect

Werkt hier

(jarig!)
Wat je ook kan doen is de md5 van het bestand nemen, dan renamen naar $md5.extentie en dat opslaan in de DB. Die md5 bijhouden is sowieso wel handig om na te gaan of het bestand niet tussendoor ergens fout gegaan is, de kans dat er al een ander bestand met dezelfde md5 bestaat is vrij klein (tenzij het hetzelfde bestand is, dat vang je dan ook gelijk af ;) ).
En als het bezwaarlijk is dat er maar 1 versie van hetzelfde bestand zou kunnen bestaan, dan kan je ook nog een random getal er achter toe voegen.

Acties:
  • 0 Henk 'm!

  • raps
  • Registratie: April 2003
  • Laatst online: 06-09 19:51
curry684 schreef op 29 april 2004 @ 10:29:
[...]

Als de logische en functioneel correcte alternatieven je bekend zijn, waarom wil je dan zonodig volharden om de inferieure variant te implementeren?
Het probleem was dat het in mijn ogen niet logisch was. Jij hebt nooit dat je iets aan het maken bent en dat je een gevoel hebt dat het beter/sneller/handiger kan? Ik was daar naar op zoek gegaan en heb die gezochte 'oplossing' niet gevonden, vandaar dit topic.
ACM schreef op 29 april 2004 @ 10:53:
Wat je ook kan doen is de md5 van het bestand nemen, dan renamen naar $md5.extentie en dat opslaan in de DB. Die md5 bijhouden is sowieso wel handig om na te gaan of het bestand niet tussendoor ergens fout gegaan is, de kans dat er al een ander bestand met dezelfde md5 bestaat is vrij klein (tenzij het hetzelfde bestand is, dat vang je dan ook gelijk af ;) ).
En als het bezwaarlijk is dat er maar 1 versie van hetzelfde bestand zou kunnen bestaan, dan kan je ook nog een random getal er achter toe voegen.
Ook al is het geen antwoord op mijn vraag: hartstikke bedankt voor de tip! Dit ga ik er zeker in verwerken.
Pagina: 1