Hallo,
ich hätt da n Problem …..
Ich habe ein Formular zum erstellen eines „Projekts“ wo man Projektdaten eingibt und Projektbilder upgeloadet werden sollen. Das soll in ne MySql Datenbank eingetragen werden mit insert into …
Das Problem ist, ich will das der Ordner (der automatisch erstellt wird für jedes Projekt) die ID des Datensatzes bekommen soll. Auch die Bildernamen sollen die ProjektID enthalten.
Dazu brauche ich aber den nächsten AUTO_INCREMENT Wert für die Tabelle, weil mein Datensatz erst in die Datenbank am Ende eingetragen (beim Anklicken des Submitbuttons) wird, also zum jetzigen Zeitpunkt noch nicht existiert.
Ich brauche eine Funktion die mir den nächsten auto_increment RESERVIERT und zurückgibt und den auto_increment danach erhöht.
Einige von euch werden bestimmt an LAST_INSERT_ID() bzw. mysql_insert_id() denken aber das hilft mir nicht denn dafür muss ich vorher ein insert oder update statement abgesetzt haben.
Ich könnte zwar vorher ein „dummyinsert“ machen aber wenn der user die Eingabe nicht abschliesst (ich gehe hier vom dümmsten anzunehmenden user aus), hab ich sehr viele leere Datensätze in der DB. Das kann ja wohl net der Sinn der Sache sein.
Mit „SHOW TABLE STATUS LIKE 'Projekte';“ bekomme ich zwar den nächsten auto_increment Wert und ich könnte mit „alter table … “ den auto_increment verändern aber genauso gut kann ich auch Harakiri begehen.
Das nützt mir nix, weil sich der Wert zwischenzeitlich ändern kann.
Z.B. Opa Olaf will sein Projekt eintragen und füllt die Felder gaaaanz langsam aus, inzwischen will auch der Junge Johannes sein Projekt von seinem PC eintragen füllt die Felder aus und ist vor Opa fertig, schickt es ab und danach hat der Opa gelitten weil er den alten auto_increment Wert hat und beim abschicken kriegt er die Fehlermeldung dass ein Datensatz mit der ID schon vorhanden ist. Und das ist nur das kleinste Übel von vielen.
Also ich kann zusammengefasst nix anfangen mit:
- mysql_insert_id() bzw. LAST_INSERT_ID()
- SHOW TABLE STATUS LIKE 'Projekte' und Alter TABLE Projekte auto_increment = $irgendwas;
- Tabelle zwischenzeitlich zu sperren kommt auch nicht in Frage ... bis Opa fertig ist sind 100 user genervt
Ihr habt bestimmt auch schon das Problem gehabt. Ich denke es gibt da bestimmt eine elegantere Lösung nur fällt die mir nicht ein.
Ich bedanke mich schon mal in Voraus !
ich hätt da n Problem …..
Ich habe ein Formular zum erstellen eines „Projekts“ wo man Projektdaten eingibt und Projektbilder upgeloadet werden sollen. Das soll in ne MySql Datenbank eingetragen werden mit insert into …
Das Problem ist, ich will das der Ordner (der automatisch erstellt wird für jedes Projekt) die ID des Datensatzes bekommen soll. Auch die Bildernamen sollen die ProjektID enthalten.
Dazu brauche ich aber den nächsten AUTO_INCREMENT Wert für die Tabelle, weil mein Datensatz erst in die Datenbank am Ende eingetragen (beim Anklicken des Submitbuttons) wird, also zum jetzigen Zeitpunkt noch nicht existiert.
Ich brauche eine Funktion die mir den nächsten auto_increment RESERVIERT und zurückgibt und den auto_increment danach erhöht.
Einige von euch werden bestimmt an LAST_INSERT_ID() bzw. mysql_insert_id() denken aber das hilft mir nicht denn dafür muss ich vorher ein insert oder update statement abgesetzt haben.
Ich könnte zwar vorher ein „dummyinsert“ machen aber wenn der user die Eingabe nicht abschliesst (ich gehe hier vom dümmsten anzunehmenden user aus), hab ich sehr viele leere Datensätze in der DB. Das kann ja wohl net der Sinn der Sache sein.
Mit „SHOW TABLE STATUS LIKE 'Projekte';“ bekomme ich zwar den nächsten auto_increment Wert und ich könnte mit „alter table … “ den auto_increment verändern aber genauso gut kann ich auch Harakiri begehen.
Das nützt mir nix, weil sich der Wert zwischenzeitlich ändern kann.
Z.B. Opa Olaf will sein Projekt eintragen und füllt die Felder gaaaanz langsam aus, inzwischen will auch der Junge Johannes sein Projekt von seinem PC eintragen füllt die Felder aus und ist vor Opa fertig, schickt es ab und danach hat der Opa gelitten weil er den alten auto_increment Wert hat und beim abschicken kriegt er die Fehlermeldung dass ein Datensatz mit der ID schon vorhanden ist. Und das ist nur das kleinste Übel von vielen.
Also ich kann zusammengefasst nix anfangen mit:
- mysql_insert_id() bzw. LAST_INSERT_ID()
- SHOW TABLE STATUS LIKE 'Projekte' und Alter TABLE Projekte auto_increment = $irgendwas;
- Tabelle zwischenzeitlich zu sperren kommt auch nicht in Frage ... bis Opa fertig ist sind 100 user genervt
Ihr habt bestimmt auch schon das Problem gehabt. Ich denke es gibt da bestimmt eine elegantere Lösung nur fällt die mir nicht ein.
Ich bedanke mich schon mal in Voraus !
Kommentar