PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Id zurueck liefern



Floh1111
26.12.2006, 17:58
Guten abend,

Ich bin mal wieder am rumbasteln und komme an einer Stelle nicht weiter.

Ueber einen Php befehl wird ein Text an eine Mysql 5 Datenbank gesendet.
Dort bekommt er automatisch eine "id" und wird abgespeichert.

Kennt sicher jeder. Ist ja das gaengige prinzip einer Textspeicherung.

Geht es, dass mir mysql sagt welche "id" der Text bekommen hat und wenn ja wie? (Ohne das ich weis welchen inhalts der text ist oder irgendwelche anderen anhaltspunkte zu dem block habe. Eine "WHERE" abfrage faellt also weg.)

MFG
Floh1111

rebugger
26.12.2006, 19:12
Wenn du es in PHP machst:
mysql_insert_id() ist dein Freund!

http://de.php.net/manual/de/function.mysql-insert-id.php

Floh1111
26.12.2006, 21:23
Ja genau so in etwa meinte ich das.

Problem:
Wenn nun 2 leute an einer datenbank arbeiten, wird das ergebnis im prinzip richtig sein unter umstaenden bekomme ich dann aber nicht mehr die "id" die zu dem Text gehoert bsp. wenn die zwei leute fast zeitgleich einen insert befehl absenden und sich die befehle dann ueberschneiden bekomme ich die id von dem anderen text, da er spaeter abgeschickt wurde.
Nauerlich geht es da nur um milisekunden, kann aber im enteffekt zu einem falschen endergebnis fueren.

Gibt es da noch etwas genaueres?
Also das ich auch wirklich die Id zum text bekomme?
Bsp.:
Insert befehl wird abgesendet -->
<-- Text bekommt id -->
<-- Mysql gibt php bzw. dem browser die zugewiesene id zurueck.

MFG
Floh1111

ganymed
02.01.2007, 19:55
im manual steht jetzt:
"int mysql_insert_id ( [resource Verbindungs-Kennung] )"
weiß jetzt aber nicht genau um was es sich bei der verbindungskennung handeln soll....aber das müsste es doch sein.
$db = @mysql_connect($db_server, $db_user, $db_passwort);
kenn mich aber zu wenig mit der technik aus die dahinter steckt. ist diese kennung einzigartig?
dann ließe sich damit sicher was anfangen.
gibt es nicht noch die möglichkeit zwei abfragen direkt nacheinander mit einem befehl auszuführen? ist zwar sicher unsicher, aber dann hättest du gewährleistet, dass du mit LAST_INSERT_ID() auch wirklich die id deienes textes bekommst. geht aber in die richtung einer erneuten abfrage. da kannstes schon fast gleich mit SELECT... machen.

Floh1111
02.01.2007, 20:22
Ja ich hab das jetzt mit insert_id gemacht und hab das ganze einfach in eine if-abfrage mit geschweiften klammern gepack, so das daraus praktisch "eine" abfrage wird. Hatte damit noch keine Probleme, habs aber auch noch keinem intensivtest unterzogen.

MFG
Floh1111

supersucker
15.01.2007, 08:37
Problem:
Wenn nun 2 leute an einer datenbank arbeiten, wird das ergebnis im prinzip richtig sein unter umstaenden bekomme ich dann aber nicht mehr die "id" die zu dem Text gehoert bsp. wenn die zwei leute fast zeitgleich einen insert befehl absenden und sich die befehle dann ueberschneiden bekomme ich die id von dem anderen text, da er spaeter abgeschickt wurde.
Nauerlich geht es da nur um milisekunden, kann aber im enteffekt zu einem falschen endergebnis fueren.

Nein,

das ist Unsinn.

Wenn die Funktion das nicht leisten würde, könnte man die Funktion ja gar nicht nutzen.

Und alle gängigen Datenbanken sind multiuser-fähig, wir leben schließlich nicht mehr in den sechziger Jahren.......:)

Schau dir mal Transaktionslevel (guter Artikel bei wikipedia z.b.) an, dann weisst du was ich meine.....

Lange Rede kurzer Sinn: Um solche Sachen brauchst du dir keine Gedanken machen, wenn du das machen müsstest könntest du dir ja auch gleich dein eigenes DBMS schreiben.

Floh1111
16.01.2007, 09:58
Danke Supersucker.
Genau da wusste nämlich nicht wie sich Mysql da verhällt.
Ich les mir Wikipedia Artikel mal durch wenn ich aus der Schule wiederkomme.

MFG
Floh1111