Hm kann ich mir kaum vorstellen. Eigentlich läuft das so ab, dass der Post in der DB gespeichert wird und dann der Text des Posts mit gleicher ID.
Code: Alles auswählen
$sql = ($mode != "editpost") ? "INSERT INTO " . POSTS_TABLE . " (topic_id, forum_id, poster_id, post_username, post_time, poster_ip, enable_bbcode, enable_html, enable_smilies, enable_sig) VALUES ($topic_id, $forum_id, " . $userdata['user_id'] . ", '$post_username', $current_time, '$user_ip', $bbcode_on, $html_on, $smilies_on, $attach_sig)" : "UPDATE " . POSTS_TABLE . " SET post_username = '$post_username', enable_bbcode = $bbcode_on, enable_html = $html_on, enable_smilies = $smilies_on, enable_sig = $attach_sig" . $edited_sql . " WHERE post_id = $post_id";
if (!$db->sql_query($sql, BEGIN_TRANSACTION))
{
message_die(GENERAL_ERROR, 'Error in posting', '', __LINE__, __FILE__, $sql);
}
if ($mode != 'editpost')
{
$post_id = $db->sql_nextid();
}
$sql = ($mode != 'editpost') ? "INSERT INTO " . POSTS_TEXT_TABLE . " (post_id, post_subject, bbcode_uid, post_text) VALUES ($post_id, '$post_subject', '$bbcode_uid', '$post_message')" : "UPDATE " . POSTS_TEXT_TABLE . " SET post_text = '$post_message', bbcode_uid = '$bbcode_uid', post_subject = '$post_subject' WHERE post_id = $post_id";
Tritt ein Fehler auf wird sofort mit einer Fehlermeldung abgebrochen (Verbindungsfehler müsste also aufgefallen sein).
Die Frage ist was passiert wenn mehrere User absolut zeitgleich Posten. In den Zeilen
Code: Alles auswählen
if ($mode != 'editpost')
{
$post_id = $db->sql_nextid();
}
wird die gerade verwendete ID aus der DB geholt (bei einem neuen Post kennt man die ja noch nicht). Die Frage ist jetzt, kann das Skript so unglücklich pausiert worden sein (Multithreading, jetzt ist der andere User dran) dass ausgerechnet vor dem Holen der ID unterbrochen wurde? Dann bekämen beide User aus der DB die gleiche ID zurück. Haken an der Geschichte wäre allerdings dass (zumindest bei mir) die ID der Primärschlüssel in beiden Tabellen ist und somit eine Mehrfacheintragung mit gleicher ID unmöglich (würde auch eine Fehlermeldung generieren).
Oder zeitgleicher Post und die ID's werden durch minimale Zeitunterschiede beim Eintrag vertauscht? Auch unwahrscheinlich, denn der Befehl sollte immer die letzte ID rausrücken und müsste daher auch in diesem Fall beiden die gleiche liefern.
--> Mir fällt keine Situation ein, wo das eintreten könnte was du beschreibst.