mmofacts.com

Kleines MySql Problem mit ID Rückgabe

gepostet vor 18 Jahre, 4 Monate von Freshman
Hallo,
ich habe ein kleines Problem mit mySql.
Ich habe eine tabelle `nachrichten`
Wenn ich dort eine neue Nachricht einfüge, dann möchte ich,
irgendwie automatisch als eine Art Rückgabewert die ID erhalten,
unter der diese Nachricht eingetragen wurde.
Von mir aus auch mit einer weiteren Abfrage, es kann aber sein, dass
schon wieder neue nachrichten da sind innerhalb der kurzen Zeit.
Hat dafür jemand eine einfache Lösung?
gepostet vor 18 Jahre, 4 Monate von exception
mysql_insert_id() sollte weiterhelfen.
gepostet vor 18 Jahre, 4 Monate von Drezil
select last_insert_id();
Liefert dir die zuletzt erstellte ID derselben Transaktion zurück.
Wenn du keine Transaktion nutzt, ist es die zuletz hinzugefügte ID (unabhängig vom thread - wenn nen anderes script zeitgleich dasselbe macht, ist die ausgabe mE nicht zwingend korrekt)
Lieber vorher Transaktionen nutzen .. falls du nicht weisst, was das ist, hilft die Wikipedia und viel lesen (ich kanns auch noch nicht so gut..)
gepostet vor 18 Jahre, 4 Monate von Freshman
Ich kenne das Prinzip der Transaktionen in der Theorie.
Praktisch habe ich es noch nie gemacht, weshalb das aufgrund von
Zeitdruck erstmal nichts werden würde.
Ich werde mal schauen, ob "select last_insert_id();" mir die richtigen
Werte gibt.
Danke für die Hilfe.
gepostet vor 18 Jahre, 4 Monate von The-Winner
Wenn ich mich richtig erinnere gab die php Funktion (wahrscheinlich mysql_insert_id() ) den Wert für die aktuelle Verbindung zurück, was durch andere Threads nicht beeinflusst werden sollte.
gepostet vor 18 Jahre, 4 Monate von HSINC
korrekt, mysql_insert_id() (php) und LAST_INSERT_ID() (mysql) liefern immer den letzten autoinc wert für die aktuelle verbindung zurück, also kann man sicher sein das der wert stimmt
(es sei denn mit dem datensatz ist indessen wieder was passiert durch einen anderen thread, aber das sei mal dahingestellt)
gepostet vor 18 Jahre, 4 Monate von Freshman
Gut, aber soviel Threadsicherheit sollte schon Garantiert sein,
dass sowas nicht passieren kann, jedenfalls in meinem Code
Habe zuerst nur die funktion in php gefunden, mein Spiel ist
aber in c++.
Das kann schon manchmal nerven das alle schnellen Anleitungen in
php sind. Man kann es zwar schnell umwandeln, aber in PHP würde
einfaches kopieren manchmal reichen...
Aber nochmal danke, es funktioniert wie gewünscht
gepostet vor 18 Jahre, 4 Monate von Itchy
Du weißt aber, daß fast alle Funktionen im PHP auch in C existieren, da PHP ja auch die Header der entsprechenden Anwendungen (in diesem Fall MySQL) benutzen?
In diesem Fall der Ausschnitt aus der mysql.h:
my_ulonglong STDCALL mysql_insert_id(MYSQL *mysql);

Du kannst den Befehl also auch direkt in C/C++ verwenden.
Das ist doch das schöne am PHP - es verwendet dieselben Funktionen wie C, so kann man den Code schnell konvertieren, wenns (z.B. wegen Performance) darauf ankommt.
gepostet vor 18 Jahre, 4 Monate von Freshman
ich weiß, habe ich auch noch im header gefunden.
Dennoch danke für den Hinweis.
ps.: my_ulonglong ( typedef unsigned lon long ) ...
Das nenne mich mal eine große Zahl , auch wenn bei meinem
Compiler long und long long jeweils 8 Byte groß sind und deshalb die selbe Zahl ergiben, aber einen solchen Index will ich mal erreichen ...

Auf diese Diskussion antworten