Nächste ID der Datenbank herausfinden

webdoktor

Angesehenes Mitglied
Hallo zusammen

Ich habe eine kleine Frage und zwar möchte ich bevor ich einen Eintrag in die DB mache die nächste
ID herausfinden. Aus meinier Sicht kann ich nicht einfach die letzte auslesen und +1 weil wenn zwei
Personen gleichzeitig etwas eintragen haben die plötzlich die gleiche ID.

Wie genau kann ich das am besten machen? Wer hat da Erfahrung.

Danke für eure Hilfe.

Grüsse Marco
 
100% Sicherheit hast du nur wenn die die generierte ID (wenn autoincrement, bzw identity) NACH dem eintragen aus den Systemvariabeln (z.B. LAST_INSERT_ID() unter mysql) ausliest. Alles andere wird dich irgendwann gewaltig in den Arsch beissen.
 
Ich kann alonso nur zustimmen. Alles andere als die von MYSQL dafür bereitgestellte Methode wird früher oder später mal Probleme bereiten. Spreche aus Erfahrung, mir hat damals niemand von von der last_insert_id() methode erzählt
smile.gif
 
Ich habe mir es so angwöhnt, einen Eintrag in die DB zu machen und dann die neue ID auszulesen. Danach kann ich den Eintrag updaten oder verwerfen.

CODE mysql_query("INSERT INTO ...");
$actual_id = mysql_insert_id();
mysql_query("UPDATE ... WHERE id = $actual_id ...")


Hätte ich frühe wissen sollen, dass es eine last_insert_id() Methode gibt ...
wink.gif


Viele Grüße
Steve
 
Hallo Alonso

Zuerst mal Dank für die prompte Antwort (natürlich an alle). Nun wie sieht das den in der Praxis aus?
Wenn er etwas hochläd, dann erstelle ich zuerst die neue Zeile und lese gleich nach dem Insert die letzte
ID aus mit last_insert_id()

Also würde das so aussehen:

CODE //Datenbank eintragen
$eintrag = "INSERT INTO xxx (test, test2) VALUES ('', '')";
mysql_query($eintrag);
$letzte_id = mysql_insert_id();


//Updaten WENN OK
$eintrag = "UPDATE xxx Set test = 'blablabla' WHERE id = '$letzte_id'";
mysql_query($eintrag);

//DEL WENN NICHT OK
$loeschen = "DELETE FROM xxx WHERE id = '$letzte_id'";
$loeschen = mysql_query($loeschen);


Sehe ich das so richtig?
Marco
 
Warum tägst du nicht gleich die richtigen Werte mit dem Insert ein?
Und warum machst du ein Insert, direkt wieder gefolgt von einem delete?
Da kannst du doch gleich das Eintragen unterlassen...

Ich glaube ich verstehe nicht was du mit deinem codebeispiel bewirken willst.

 
So wie ich es verstanden habe, möchte Marco eine Eintrag reservieren und diese Reservierung dann später wieder verwerfen oder halt wahrnehmen.

Wenn dem so ist, dann ist der Code genau passend ...
 
OK, wenn es mehrere Codesnipsel sind und kein zusammenhängender Code macht es schon mehr Sinn.
cool.gif


 
Zurück
Oben