Mit MySQL ID weiterarbeiten

Dark Ranger

Erfahrenes Mitglied
Hi

Habe mal eine Frage, wie macht ihr es wenn ihr Daten in eine Datenbank(hier MySQL) schreibt und danach mit der ID des Datensatzes weiterarbeiten wollt?

Bei vielen Userzugriffen ist mysql_insert_id wahrscheinlich zu ungenau oder?
 
Bei der Schnelligkeit der Operation ist es zwar recht unwahrscheinlich, daß sich da noch ein weitere Datensatz dazwischen drängelt, im Zweifelsfall selektiere ich genau auf die relevanten Daten, die vorher geschrieben wurden. Es muß da nur sichergestellt sein, daß es da keine doppelten Einträge geben kann. Z.B. wären mMn Name, Adresse, Geb.datum ausreichend eindeutig.
Andere Lösung: entweder die Unix Systemzeit oder (noch genauer) die Javascript Zeit in ein separates Feld schreiben und danach selektieren.
 
Naja, mysql_insert_id() bezieht sich ja auf die INSERTs der aktuellen Skript-Instanz, da brauchst du keine Angst haben, durcheinander zu kommen.

Verwechsel das nicht mit der LAST_INSERT_ID von MySQL...das könnte sehr wohl zu Überschneidungen führen ;)
 
Habe da nochmal eine Frage:

Ich verwende in einem Script nacheinander mehrere SQL Statements, zum Beispiel auch welche die Daten verändern.

Wie gehe ich nun damit um wenn ich zum Beispiel ein Statement einen Fehler verursacht hat und ich dadurch das Script sozusagen abbreche und dem User mitteile, dass ein Fehler aufgetreten ist. Nun ist ja das Problem, dass ich schon Daten verändert habe zum Beispiel, wie kann ich das wieder rückgängig machen?

Sowas wie ein Speicherpunkt wäre toll, allerdings darf der nur Sachen beinhalten die dann in dem script passieren und nicht zum Beispiel von anderen User.

Irgendwer eine Idee? Denke ich vielleicht ein bisschen falsch?
 
Gute Frage-Schwere Frage :-)

Einfach geantwortet würde ich sagen: Vermeide Fehler...wie genau das auszusehen hätte, hängt von deinen Querys ab.

Ansonsten: Bevor du etwas an der DB änderst, könntest du die betroffenen Datensätze zwischenspeichern, damit du sie später wiederherstellen kannst...das kann aber je nach Komplexität der Queries recht aufwändig werden....deshalb würde ich unbedingt die einfache Variante vorschlagen.
 
Versuche so weit wie möglich, alle Daten vor dem ersten Schreibvorgang zu prüfen. Nur wenn alle Daten in Ordnung sind gehst du weiter zu den Änderungen. Dadurch kann es zwar passieren, daß ein paar Operationen doppelt ausgeführt werden aber lieber so als daß du hinterher wieder zurückrudern mußt.
 
Mhhh muss ich mir nochmal ein paar Gedanken drüber machen, Problem ist einfach dass ich mit manchen Daten erst arbeiten kann wenn ich schon etwas an der Datenbank geändert habe.

Die Idee von Sven ist schon nicht schlecht mit dem zwischenspeichern, aber wahrscheinlich eher sehr kompliziert und performancelastig, dass beste wäre, wenn die INSERTs und UPDATEs automatisch analysiert werden und man sozusagen ein gegenQuery bekommt, mit dem man dann die Veränderung rückgangig machen kann ^^
 
Mhhh das mit dem überwachen der Daten finde ich gar nicht mal so schlecht, allerdings würde das bedeuten, dass ich einiges speichern muss und außerdem am Besten auch noch einen Standard brauche, wie ich meine Statements aufbaue, naja was heißt Standard, standard sind sie ja schon, aber ne Möglichkeit wie ich das ganze auseinandernehme und analysiere

PHP:
$save = $db->savepoint();
$db->query();
$db->query();
$db->insert();
$db->update();
$db->query();
//Bei Fehlern
$db->restore($save);

Sowas in der Art wäre schön ^^
 
Zurück