Guten Abend,
ich arbeite zurzeit an einem Forum und verwende für den Eintrag eines neuen Themas verbunden mit einem Beitrag die MySQL-Funktion "mysql_insert_id()". Laut Manual sollte sie ja die zuletzt eingetragene ID zurückliefern. Allerdings ist mir bei der Funktion etwas aufgefallen.
Wenn die IDs (AUTO_INCREMENT) nicht fortlaufend sind, sondern unterbrochen, durch Löschen einzelner Beiträge im Nachhinein, nimmt "mysql_insert_id()" nicht den zuletzt eingetragenen ID-Wert an, sondern wird gefüllt mit den offenstehenden IDs, die zuvor aus der DB gelöscht werden.
Beispiel:
ID Beitrag ...
1 Test1
2 Test2
3 Test3
4 Test4
5 Test5
Wird nun die Überschrift mit der ID 3 gelöscht und ein neues Thema erstellt, so erhält mysql_insert_id() den Wert "3", trotzdem erhält das neu erstellte Thema den Wert "6".
Kann mir jemand erklären, weshalb das der Fall ist?
Ich verwende zwei Mal die Funktion "mysql_insert_id()", allerdings bei zwei verschiedenen Queries.
ich arbeite zurzeit an einem Forum und verwende für den Eintrag eines neuen Themas verbunden mit einem Beitrag die MySQL-Funktion "mysql_insert_id()". Laut Manual sollte sie ja die zuletzt eingetragene ID zurückliefern. Allerdings ist mir bei der Funktion etwas aufgefallen.
Wenn die IDs (AUTO_INCREMENT) nicht fortlaufend sind, sondern unterbrochen, durch Löschen einzelner Beiträge im Nachhinein, nimmt "mysql_insert_id()" nicht den zuletzt eingetragenen ID-Wert an, sondern wird gefüllt mit den offenstehenden IDs, die zuvor aus der DB gelöscht werden.
Beispiel:
ID Beitrag ...
1 Test1
2 Test2
3 Test3
4 Test4
5 Test5
Wird nun die Überschrift mit der ID 3 gelöscht und ein neues Thema erstellt, so erhält mysql_insert_id() den Wert "3", trotzdem erhält das neu erstellte Thema den Wert "6".
Kann mir jemand erklären, weshalb das der Fall ist?
Ich verwende zwei Mal die Funktion "mysql_insert_id()", allerdings bei zwei verschiedenen Queries.
PHP:
...
$query1 = mysql_query("INSERT INTO forum_threads ...");
$query2 = mysql_query("INSERT INTO forum_postings (id_fk, text, ...) VALUES ('".mysql_insert_id()."', '".$_POST["text"]."', ....)");
// Hier habe ich eine Klasse, die für die Weiterleitung zuständig ist.
// Ich möchte hier nun auf das neu erstellte Thema mit dem Beitrag zugreifen.
// Daher:
$url->change("index.php?inc=forum&forumid".$_GET["forumid"]."&topicid=".mysql_insert_id());
...