Stefan Welscher: [MySQL] Beim einfügen eines Datensatzen ID bekommen?

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

  1. 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

    1. 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?

      1. 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

        1. 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

        2. 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 ;)

          1. 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

      2. 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?

        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

        1. 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

      3. 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

        1. 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

          1. 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

            --
            My sssignature, my preciousssss!
            1. 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

            2. 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 :)

      4. 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