Kalle: MySQL: Rückgabe des auto_increment Wertes bei INSERT

Hallöle,

Wenn ich mit insert einen Satz schreibe, dessen Feld "id" mit auto_increment definiert wurde, kann ich doch anschließend diese id bekommen ?

INSERT INTO bfp_protokoll (
  programm_name
 ,zeit_start
 ) VALUES (
  'test'
 ,".time()."
 )

Wie ist jetzt die Abfrage, so dass ich auch meine eigene "id" bekomme und nicht die eines anderen Users, der zur gleichen Zeit ein anderes Insert gemacht hat?

Danke für die Hilfe, Kalle

  1. Hallo!

    Wie ist jetzt die Abfrage, so dass ich auch meine eigene "id" bekomme und nicht die eines anderen Users, der zur gleichen Zeit ein anderes Insert gemacht hat?

    LAST_INSERT_ID()

    Beste Grüße
    Viennamade

    1. LAST_INSERT_ID()

      nöö, bei phpmyadmin - Eingabe der Zeile

      select last_insert_id()

      wird der Wert 0 (Zahl Null) ausgegeben, obwohl gerade ein Datensatz mit der ID = 2 angelegt wurde.

      1. Hallo!

        Bitte um Entschuldigung, mein Posting war wohl kurz ... kaum macht man mehreres gleichzeitig kommt nichts mehr Gutes raus.

        LAST_INSERT_ID()

        http://dev.mysql.com/doc/mysql/en/Information_functions.html
        meinte ich!
        Funktioniert sehr gut, lt. Manual kommt es auch nicht zu den Problemen die durch "gleichzeitige Benutzer" befürchtet werden.

        Beste Grüße
        Viennamade

      2. Moin!

        nöö, bei phpmyadmin - Eingabe der Zeile

        select last_insert_id()

        wird der Wert 0 (Zahl Null) ausgegeben, obwohl gerade ein Datensatz mit der ID = 2 angelegt wurde.

        Logisch. Du kannst last_insert_id(), egal ob als PHP- oder MySQL-Funktion nicht (zumindest nicht "einfach") in PHPMyAdmin benutzen.

        PHPMyAdmin ruft immer wieder einzelne Skripte auf, stellt dann jeweils eine neue Verbindung zur DB her, und führt eine Abfrage aus.

        last_insert_id() erfordert, dass man direkt nach dem erzeugenden Statement (INSERT, REPLACE) über dieselbe DB-Connection "SELECT LAST_INSERT_ID()" abfragt bzw. in PHP mysql_insert_id() benutzt. Das garantiert auch die Eindeutigkeit und Richtigkeit der ID, denn andere User benutzen andere DB-Connections. Du kriegst so garantiert immer die erzeugte ID deines letzten INSERT.

        - Sven Rautenberg

        1. Hello,

          Logisch. Du kannst last_insert_id(), egal ob als PHP- oder MySQL-Funktion nicht (zumindest nicht "einfach") in PHPMyAdmin benutzen.

          PHPMyAdmin ruft immer wieder einzelne Skripte auf, stellt dann jeweils eine neue Verbindung zur DB her, und führt eine Abfrage aus.

          Zum Testen habe ich einen "Offline-Server". Das ist praktisch, weil ich auf den mit MySQL-Front zugreifen kann. Da kann man seine Statements vernünftig ausprobieren.

          Ich nehem an, dass Du das auf deinem "Hot-Server" testet. Du könntest dann vielleicht über ssh auf der Konsole arbeiten. Also das Hilfsprogramm ("Shell") mysql aufrufen und loslegen.

          Liebe Grüße aus http://www.braunschweig.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    2. Hello,

      LAST_INSERT_ID()

      Gibt es in PHP und auch in MySQL selbst. Ich würde die aus MySQL benutzen, die den vollen Wertebereich bedienen kann, die aus PHP aber nur einen eingeschränkten.

      Liebe Grüße aus http://www.braunschweig.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
  2. danke euch,

    ich habe last_insert_id() erstmal mit Bedenken ==> in PHP <== eingesetzt, klappt auch.

    Und diese Erklärung brachte dann das nötige Verständnis:

    "PHPMyAdmin ruft immer wieder einzelne Skripte auf, stellt dann jeweils eine neue Verbindung zur DB her, und führt eine Abfrage aus."

    Klar, ich erhalte in PHPMyAdmin bei jeder Abfrage wohl eine neue Connect-ID, die ich ja während eines PHP-Skripts nicht wechsle.

    Es ist also nicht der USER, der seine last_insert_id() zurückerhält, sondern die temporäre conn_id. Denn der User der Datenbank ist ja immer derselbe, auch mehrfach zeitgleich.

    Gruß, Kalle