mysql_affected_rows bei onlinelist-update

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • mysql_affected_rows bei onlinelist-update

    folgendes szenario:

    - ich logge mich ein, und klicke rum, die onlineliste wird bei den einzelnen bereichen aktualisiert, wo man sich befindet und der aktuelle timestamp

    - ich wechsle in den admin bereich (neues fenster - frameset), onlineliste wird upgedatet, ABER zusätzlich ein neues eintrag gemacht

    PHP-Code:
    $update_user $this->database->sendQuery('UPDATE
                                                   ' 
    TABLE_ONLINELIST '
                                               SET
                                                   ' 
    $update_section '
                                                   onlinelist_timestamp = ' 
    time() . '
                                               WHERE
                                                   user_id = ' 
    intval($user_id));

    if (
    $this->database->countAffectedRows($update_user) == 0) {
        
    //neuer eintrag wenn keine zeilen bearbeitet wurden

    herausgefunden habe ich dass das irgendwas mit dem frameset zu tun hat, denn wenn ich seiten angebe die nicht existieren wird richtig aktualisiert und kein neuer eintrag gemacht

    allerdings hat die normale community seite auch ein frameset, und wenn ich das neu lade wird die onlineliste richtig aktualisiert

    mysql_affected_rows bezieht sich doch nur auf das aktuelle script und nicht auf die gesamte datenbank ?

    kann es evtl sein dass wenn das admin frameset lädt der eintrag solange gelocked ist sodass eine der frameseiten nicht updaten kann und einen neuen eintrag macht ?

    lässt sich das umgehen oder muss ich wieder auf die alte version wechseln, wo erst geprüft wird ob ein eintrag vorhanden ist und dann aktualisiert / eingetragen wird (d.h. minimal 2 abfragen allein für das update pro seitenwechsel) ?

  • #2
    kann es evtl sein dass wenn das admin frameset lädt der eintrag solange gelocked ist sodass eine der frameseiten nicht updaten kann und einen neuen eintrag macht ?
    Nein aber so ähnlich.
    Das erste Frame macht ein ganz normales Update.Das zweite Frame versucht das gleiche Update (gleiche Zeit gleiche update_section) zu machen. Das merkt Mysql und führt den Update Befehl nicht aus. Damit bekommt mysql_affected_rows() auch eine 0 zurück und es wird ein zweiter Eintrag gemacht.
    muss ich wieder auf die alte version wechseln, wo erst geprüft wird ob ein eintrag vorhanden ist und dann aktualisiert / eingetragen wird (d.h. minimal 2 abfragen allein für das update pro seitenwechsel) ?
    entweder das oder du schaust mal ob dir REPLACE weiter hilft.

    btw: ich glaub das ist eher ein mysql problem

    Kommentar


    • #3
      danke,
      replace funktioniert in diesem fall nicht, da in der onlineliste-tabelle noch mehr daten stehen die ich widerum erst auslesen müsste um sie beizubehalten, was auf das selbe rauskommt wie wenn ich erst schau ob ein eintrag vorhanden ist und dann entsprechend handle

      ich bin nun auf die idee gekommen die user_id spalte kurzerhand "unique" zu machen - nun kommt natürlich der fehler "Duplicate entry '5' for key 1" in einem frame des admin-bereichs (also wie du sagtest, mysql erkennt dass die abfrage gleich ist und überspringt sie)

      ich werde mal noch damit herumspielen, evtl kann ich doch replace einsetzen, da ich die zusätzlichen onlineliste-daten in einer user-datei zwischenspeichere dann müsste ich die vorher nicht erst auslesen

      Kommentar


      • #4
        okay,
        sah ganz vielversprechend aus, die gewünschte funktionalität war da, nur wurde natürlich das feld "section" in der datenbank immer leer wenn ich auf eine seite wechselte bei der die section nicht aktualisiert werden sollte
        die wird auch nicht zwischengespeichert, da sie sich bei jedem bereich ändert
        deshalb keine chance mit replace

        eine etwas unelegante lösung, aber wohl die einzig übrigbleibende wäre nun wohl ein weiteres feld anzulegen in dem bei jedem update ein z.b. 4 zeichen langer zufälliger string geschrieben wird, damit die abfrage in jedem fall ausgeführt wird.

        Kommentar

        Lädt...
        X