tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
8
ZUGRIFFE
252
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Dark Ranger Dark Ranger ist offline Mitglied Brokat
    Registriert seit
    Aug 2005
    Beiträge
    436
    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?
     

  2. #2
    Sprint Sprint ist offline Mitglied Platin
    Registriert seit
    Apr 2004
    Ort
    Die heimliche Hauptstadt des Bieres
    Beiträge
    579
    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.
     

  3. #3
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    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
     

  4. #4
    Dark Ranger Dark Ranger ist offline Mitglied Brokat
    Registriert seit
    Aug 2005
    Beiträge
    436
    Ahh ok, dann macht das ja keine Probleme, besonders, da ich auch noch die Kennung mitgebe, danke für die Infos
     

  5. #5
    Dark Ranger Dark Ranger ist offline Mitglied Brokat
    Registriert seit
    Aug 2005
    Beiträge
    436
    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?
     

  6. #6
    Avatar von Sven Mintel
    Sven Mintel Sven Mintel ist offline Mitglied
    Registriert seit
    Aug 2003
    Beiträge
    18.238
    Blog-Einträge
    6
    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.
     

  7. #7
    Sprint Sprint ist offline Mitglied Platin
    Registriert seit
    Apr 2004
    Ort
    Die heimliche Hauptstadt des Bieres
    Beiträge
    579
    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.
     

  8. #8
    Dark Ranger Dark Ranger ist offline Mitglied Brokat
    Registriert seit
    Aug 2005
    Beiträge
    436
    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
     

  9. #9
    Dark Ranger Dark Ranger ist offline Mitglied Brokat
    Registriert seit
    Aug 2005
    Beiträge
    436
    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-Code:
    $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
     

Ähnliche Themen

  1. Praktikumsbeurteilung. Im selben Bereich weiterarbeiten.
    Von applefan im Forum Ausbildung & Beruf
    Antworten: 1
    Letzter Beitrag: 08.09.10, 15:23
  2. Antworten: 12
    Letzter Beitrag: 12.05.08, 00:47
  3. mysql: mysql-server: mysql.sock fehlt (Suse 9.1)
    Von zappoth im Forum Relationale Datenbanksysteme
    Antworten: 2
    Letzter Beitrag: 08.05.06, 18:06
  4. Mit Hexacode weiterarbeiten
    Von tommy07 im Forum C/C++
    Antworten: 2
    Letzter Beitrag: 22.04.05, 22:47
  5. Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)
    Von strandjunge im Forum Relationale Datenbanksysteme
    Antworten: 0
    Letzter Beitrag: 19.01.05, 15:33