mysql_insert_id() bei mehreren Prozessen

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • mysql_insert_id() bei mehreren Prozessen

    Servus,

    bin bislang stiller Mitleser gewesen, aber jetzt hab' ich auch mal eine Frage. Es geht darum, daß ich gern mysql_insert_id() prozeßsicher einsetzen würde, sodaß das Ergebnis eines anderen Insert into ... das Ergebnis nicht beeinflußt. Leider konnte mir weder die Suche im Forum noch die Doku (mySQL, PHP) weiterhelfen, deswegen stelle ich das mal hier rein und hoffe, es läßt sich lösen:

    Nehmen wir als Beispiel mal einen gut besuchten Server, auf dem gerade zwei Prozesse, A und B, einen neuen Datensatz per Insert in dieselbe Tabelle einer Datenbank einfügen wollen. Dann könnte folgendes passieren:

    - A schreibt
    - B schreibt
    - A führt mysql_insert_id() aus
    - B führt mysql_insert_id() aus

    Dann bekommt A die falsche und B die richtige insert_id. Das ist natürlich nicht der Sinn der Sache, und da das DBMS nicht wissen kann, ob die ID abgefragt wird und wenn ja, wann, wird es sich nicht die Mühe machen, Prozesse zu unterscheiden, falls es das überhaupt kann. Was ich also wissen will: wie geht das, daß man mysql_insert_id() - oder eine andere Konstruktion - so einsetzt, daß man die insert_id der letzten Einfügeoperation, welche der aktuell ausgeführte Prozess ausgeführt hat, erhält, unabhängig davon, was andere Prozesse gerade mit der Datenbank machen?

    *grübel*

    Bin bislang auf keine wirklich brauchbare Lösung gekommen und hoffe, sowas gibt's überhaupt...

    Matthias

  • #2
    das php-handbuch schweigt sich da aus, aber du kannst ja
    Code:
    SELECT LAST_INSERT_ID()
    machen
    LAST_INSERT_ID([expr])
    Returns the last automatically generated value that was inserted into an AUTO_INCREMENT column. See section 9.1.3.31 mysql_insert_id().

    The last ID that was generated is maintained in the server on a per-connection basis. It will not be changed by another client.
    ich denke mal,das mysql_insert_id genauso funktionier


    oder du probierst's aus
    PHP-Code:
    //1.php
    mysql_query("INSERT INTO tabelle (spaltenname) VALUES('bla')");
    sleep(20);
    echo 
    mysql_insert_id();

    //2.php
    mysql_query("INSERT INTO tabelle (spaltenname) VALUES('bla')");
    echo 
    mysql_insert_id(); 
    Zuletzt geändert von mrhappiness; 17.07.2003, 13:56.
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Super, das geht wirklich! Danke für den Hinweis - zumindest mit mySQL 4.0.12 lief's hier prima.

      Kommentar

      Lädt...
      X