Aiun Geschrieben 6. September 2006 Geschrieben 6. September 2006 hi, frage: wenn ich ein Insert Statement absetze und direkt danach den PHP Befehl mysql_insert_id() aufrufe, ist das dann wirklich der Auto-Increment dieses letzten Inserts, oder kann es sein das andere benuzter in der zwischenzeit eigene inserts absetzen und mir somit den Wert verfälschen ? falls ja: wenn ich sage: Transaktion Start insert mysql_insert_id transaktion commit ist dann sichergestellt das ich den richtigen Wert habe ? Zitieren
Maulwurf_der_Schlaue Geschrieben 6. September 2006 Geschrieben 6. September 2006 mysql_insert_id du könntest unterschiedliche ressource-Kennungen verwenden, ob das aber sinn macht ist was anders. ich gehe also davon aus das du durchaus unterschiedliche Werte haben kannst wenn zwischen insert und mysql_insert_id zu viel Zeit vergeht. Zitieren
Aiun Geschrieben 6. September 2006 Autor Geschrieben 6. September 2006 unterschiedliche Ressource kennungen geht ja nicht ^^, das Beispiel wären 100/1000 oder wiviele User auch immer gleichzeitig auf dem System, und, z.B. für Sessions, oder Posts im Forum o.ä. 20 machen im gleichen moment ein Insert....was kommt dann raus ? die verbindungskennung ist, weil es das gleiche Script ist, ebenfalls gleich. (oder ist sie für jede DB Session, also für "jeden" der das Script benutzt unterschiedlich ?) ich hoffe einer von euch kennt sich damit ausreichend aus.... Zitieren
Monty82 Geschrieben 8. September 2006 Geschrieben 8. September 2006 Da die Verbindung zur Datenbank für jede Client-Verbindung getrennt aufgebaut wird, wirst Du bei der Benutzung der Funktion mysql_insert_id() keine Probleme mit anderen Benutzern bekommen. Im Zweifelsfall würde ich einfach einen WRITE LOCK auf die Tabelle setzen, so dass in der Zeit zwischen INSERT und auslesen der Last-Insert-ID kein weiterer INSERT stattfinden kann. mysql_query('LOCK TABLES asdf WRITE'); mysql_query('INSERT INTO asdf (name) VALUES (\'blub\')'); $resQuery = mysql_query('SELECT LAST_INSERT_ID() AS intID'); if ($resQuery && ($arrRow = mysql_fetch_assoc($resQuery))) { $intID = $arrRow['intID']; } else $intID = 0; mysql_query('UNLOCK TABLES'); Zitieren
kills Geschrieben 13. September 2006 Geschrieben 13. September 2006 Hi, ich vermute, dass diese Methode Thread Safe ist, sonst wäre das Problem doch schon des öfteren aufgetreten.. Gruß, Markus Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.