[MySQL] Beim einfügen eines Datensatzen ID bekommen?
Stefan Welscher
- datenbank
Hallo ihr Profis!
Ich hätte da mal eine Frage:
Ich habe ein PHP-Script, das ca. 30 Zellen einer Datenbank mit Daten füllt. Da anschließend eine andere Tabelle mit diesem Datensatz verknüpft werden soll benötige ich dessen autoinkrementierte ID.
Frage:
Muss ich jetzt aus der db wieder nach diesen 30 Werten den Datensatz herausfiltern, oder gibt es eine Möglichkeit beim Eingügen des Datensatzen die ID zurückgeliefert zu bekommen?
Danke,
Stefan Welscher
Hallo!
Frage:
Muss ich jetzt aus der db wieder nach diesen 30 Werten den Datensatz herausfiltern, oder gibt es eine Möglichkeit beim Eingügen des Datensatzen die ID zurückgeliefert zu bekommen?
Du suchst den Befehl: mysql_insert_id
mfg
frafu
Hallo!
Du suchst den Befehl: mysql_insert_id
OK, interresant - Aber wenn 2 Datensätze zur gleichen Zeit eingefügt werden geht`s in die Hose, oder?
Hallo!»» »» Hallo!
Du suchst den Befehl: mysql_insert_id
OK, interresant - Aber wenn 2 Datensätze zur gleichen Zeit eingefügt werden geht`s in die Hose, oder?
Wie fügst du 2 Datensätze zur gleichen Zeit ein?
mfg
frafu
Hi,
Du suchst den Befehl: mysql_insert_id
OK, interresant - Aber wenn 2 Datensätze zur gleichen Zeit eingefügt werden geht`s in die Hose, oder?
Wie fügst du 2 Datensätze zur gleichen Zeit ein?
Gemeint ist sicher mittels eines Statements. Das ist schließlich möglich!
LG
Chris
Hallo!»» »» Hallo!
Du suchst den Befehl: mysql_insert_id
OK, interresant - Aber wenn 2 Datensätze zur gleichen Zeit eingefügt werden geht`s in die Hose, oder?
Wie fügst du 2 Datensätze zur gleichen Zeit ein?
mfg
frafu
Naja... wenn jetzt 2 User gleichzeitig den Submit-Button drücken werden gleichzeitig 2 PHP-Prozesse geöffnet die versuchen auf die db zuzugreifen. Wenn der erste Prozess seinen Datensatz geschrieben hat übernimmt die CPU durch Multitasking evtl. den Schreibvorgang des zweiten Prozesses, gibt anschließend an den ersten zurück, der dann die falsche ID zurückgibt. Ich weiß das ist eher unwahrscheinlich, aber ich werde mein Leben lang von Murphys Law verfolgt ;)
Hallo!
Naja... wenn jetzt 2 User gleichzeitig den Submit-Button drücken werden gleichzeitig 2 PHP-Prozesse geöffnet die versuchen auf die db zuzugreifen. Wenn der erste Prozess seinen Datensatz geschrieben hat übernimmt die CPU durch Multitasking evtl. den Schreibvorgang des zweiten Prozesses, gibt anschließend an den ersten zurück, der dann die falsche ID zurückgibt. Ich weiß das ist eher unwahrscheinlich, aber ich werde mein Leben lang von Murphys Law verfolgt ;)
"Gleichzeitig" gibts defakto nicht da die Requests sequentiell abgearbeitet werden.
Außerdem verwendet jeder Request seine eigene MySQL Connection. Die beiden "Submits" laufen voneinander völlig unabhängig. Dh das von dir beschriebene Problem kann nicht auftreten.
mfg
frafu
Hallo!
Du suchst den Befehl: mysql_insert_idOK, interresant - Aber wenn 2 Datensätze zur gleichen Zeit eingefügt werden geht`s in die Hose, oder?
Genau, deswegen wäre ich damit wirklich vorsichtig.
Du weißt doch, was Du reingepackt hast, oder? Also such danach und laß Dir die so die ID ausgeben.
Gruß
Reiner
Hi Reiner,
Du suchst den Befehl: mysql_insert_id
OK, interresant - Aber wenn 2 Datensätze zur gleichen Zeit eingefügt werden geht`s in die Hose, oder?
Genau, deswegen wäre ich damit wirklich vorsichtig.
Du weißt doch, was Du reingepackt hast, oder? Also such danach und laß Dir die so die ID ausgeben.
Nein, das ist bei Todesstrafe verboten, so vorzugehen ;-)
Wenn es nämlich möglich wäre, einen Datensatz über seine Dateninhalte eindeutig zu identifizieren, wäre die ID überflüssig.
LG
Chris
Hi,
Hallo!
Du suchst den Befehl: mysql_insert_id
Das ist eine Funktion mysql_insert_id()
OK, interresant - Aber wenn 2 Datensätze zur gleichen Zeit eingefügt werden geht`s in die Hose, oder?
Ja, dann müsste MySQL eigentlich, wenn es vernünftig programmiert wäre, eine Fehlermeldung liefern...
Da du bei einem Multiinsert auch nicht mit Bestimmtheit sagen kannst, welcher Datensatz erfolgreich eingefügt wurde und bei welchem etwas schiefgegengen ist, solltest Du also jeden Satz einzeln einfügen, den Fehlerstatus abfragen und bei Erfolg die insert-id erfragen, dann erst den nächsten nehmen.
LG
Chris
Da du bei einem Multiinsert auch nicht mit Bestimmtheit sagen kannst, welcher Datensatz erfolgreich eingefügt wurde und bei welchem etwas schiefgegengen ist, solltest Du also jeden Satz einzeln einfügen, den Fehlerstatus abfragen und bei Erfolg die insert-id erfragen, dann erst den nächsten nehmen.
Was passiert, wenn eine andere Applikation oder Prozeß etwas speichert bevor man nach der ID fragt?
Gruß
Reiner
Moin!
Da du bei einem Multiinsert auch nicht mit Bestimmtheit sagen kannst, welcher Datensatz erfolgreich eingefügt wurde und bei welchem etwas schiefgegengen ist, solltest Du also jeden Satz einzeln einfügen, den Fehlerstatus abfragen und bei Erfolg die insert-id erfragen, dann erst den nächsten nehmen.
Was passiert, wenn eine andere Applikation oder Prozeß etwas speichert bevor man nach der ID fragt?
Nichts. Die letzte eingefügte ID ist pro MySQL-Connect gültig. Ein anderer Prozess hat einen anderen Connect und deshalb keine Auswirkungen auf die ID.
- Sven Rautenberg
Was passiert, wenn eine andere Applikation oder Prozeß etwas speichert bevor man nach der ID fragt?
Nichts. Die letzte eingefügte ID ist pro MySQL-Connect gültig. Ein anderer Prozess hat einen anderen Connect und deshalb keine Auswirkungen auf die ID.
danke, wieder was gelernt.
Gruß
Reiner
Nichts. Die letzte eingefügte ID ist pro MySQL-Connect gültig. Ein anderer Prozess hat einen anderen Connect und deshalb keine Auswirkungen auf die ID.
- Sven Rautenberg
Danke!
Wieder was gelernd :)
Hallo!
Du suchst den Befehl: mysql_insert_id
OK, interresant - Aber wenn 2 Datensätze zur gleichen Zeit eingefügt werden geht`s in die Hose, oder?
Dann liefert mysql_insert_id angeblich (laut einem User Kommentar in der Doku) die ID des ersten eingefügten Datensatzes.
mfg
frafu