Gerade erstellten AUTO_INCREMENT auslesen (MySQL)

Hallo,
ich melde mich mal wieder :slight_smile:
Ich habe ein Forum zu meinem Browsergame geschrieben, wobei ich folgendes gerne wissen würde:

In diesem MySQL-Befehl gebe ich von meinem Formular, die boardid ($boardid = $_POST’boardid’];), die userid ($user[id] = $_SESSION[‚userid‘];), usw. alle Werte sind bestimmt also müsst ihr euch darum keine Sorgen machen.

mysql_query("INSERT INTO `board_topic` (`userid` ,`boardid` ,`title` , `ip`) VALUES ('$user[id]', '$boardid', '$title', '$ip')");

hervorragend! Thema wurde erstellt…was nun?Ganz einfach! ich möchte den Text, der eingegeben wurde ($message = $_POST[‚message‘]) nun in den Beiträgen speichern. Allerdings muss der Eintrag mit der id (hier mein AUTO_INCREMENT) von dem Thema mit der topicid der Eintragstabelle verknüpft werden.
Ich könnte natürlich jetzt noch im selben Script die letzte ID auslesen aber wa s passiert, wenn jemand im genau selben Moment auch ein neues Thema erstellt hat und die letzte id beim Übergang auf dem nächsten Befehl nun eine andere ist? ganz einfach…der Beitrag wäre nicht im gewünschten Thema sondern in dem andern, welches auch gerade erstellt wurde.

Ich hoffe ich hab es einigermaßen gut ausgedrückt >.<
in Google hab ich da nichts wirklich brauchbares gefunden.

ich weiß nicht genau was du meinst, aber wenn du t.b. einen neuen eintrag erstellst, und danach direkt einen neuen speichern willst in eine andere tabelle die aber die Id der anderen beinhalten soll dann nimmst mysql_insert_id(); ^^

ich glaube total daneben aber egal gg

Durek, versuche es bitte noch einmal genauer zu erklären…

wie heißt denn dein browsergame? link?

Stimmt das wollte ich noch hinzufügen… =/ das hab ich noch lokal aufm PC.

Was ich meine ist… den Auto_increment (id) von board_topic herausfinden, der gerade hinzugefügt wurde.

von mysql_insert_id(); war ich noch nen bissl skeptisch aber ich werde es fürs erste benutzen…

die ID von board_topic möchte ich in der Spalte topicid von der Tabelle board_entry haben.

also du könntest ja die letzte id abfragen und zusätzlich noch where userid = $_SESSION[‚user_id‘]

einfach die letzt ID abfrage:

[php]
$sql = „SELECT * FROM table ORBER BY id DESC LIMIT 1“;
[/php]

DESC: vom größten her absteigend
LIMIT: maximale anzahl der zeilen
ORDER: dürfte klar sein, geordnet gemäß…

Nils aka XraYSoLo

jo so hatte ich es aber ih dachte, dass dies nicht wirklich eine „professionelle“ Lösung ist.
Frage: fragt
mysql_insert_id();
allgemein die letzte ID oder nur die, die zuletzt in der selben Datei eingetragen wurde?

mysql_insert_id() fragt den letzten AUTO_INCREMENT im letzten Result ab.
Also im selben Dokument.
Sollte für deinen zweck also funktionieren.

btw. warum gibst du threadid etc nicht einfach mit GET weiter?

Nochmal ganz ausdrücklich, int mysqli::insert_id(), int mysql_insert_id() bzw string PDO::lastInsertId() geben die letzte automatisch erzeugte (Primay-Key) ID zurück, die über die selbe(!) Datenbankverbindung mit einem INSERT/REPLACE INTO query erzeugt wurde, jede andere instanz des scriptes hat üblicherweise eine eigene Verbindung und deshalb kann es zu keinen Race Conditions kommen, die „professionelle“ methode ist also wirklich, wie immer, total einfach, man benutzt einfach diese funktionen/methoden. Natürlich musst du immer das selbe Datenbank-Handle (~ Die selbe variable vom typ Resource) nehmen wie du auch für das INSERT/REPLACE INTO query genommen hast :slight_smile:

mfg niklas