Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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 ?

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

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');

ok, danke dir

Hi,

ich vermute, dass diese Methode Thread Safe ist, sonst wäre das Problem doch schon des öfteren aufgetreten..

Gruß,

Markus

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.