Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] mysql_affected_rows() - Rückgabe bei UPDATE

Einklappen

Neue Werbung 2019

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

  • [Erledigt] mysql_affected_rows() - Rückgabe bei UPDATE

    Hallo!

    Kann es sein das ich von PHP bei den mysql_affected_rows() ebenfalls 0 zurückbekomme wenn ein UPDATE gemacht wurde aber eben - weil sich nichts änderte nichts geändert wurde? Das wäre doof, weil ich eigenltlich bei 0 noch nen INSERT mache.

    Wie kann ich das sonst unterscheiden?

    ---------

    **$query-->UPDATE tabTipps SET TippTor1='''' WHERE SpielIDRef=4061 AND Nickname='Franzi'**

    ## mysql_affected_rows(); 0##

    **$query-->INSERT INTO tabTipps (Nickname, SpielIDRef, TippTor1) VALUES ('Franzi', 4061, '')**

    Duplicate entry 'Franzi-4061' for key 'NicknameUndSpielIDRef'/---------
    ---------
    Danke!
    The string "()()" is not palindrom but the String "())(" is.

    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

  • #2
    Zitat von hausl Beitrag anzeigen
    Kann es sein das ich von PHP bei den mysql_affected_rows() ebenfalls 0 zurückbekomme wenn ein UPDATE gemacht wurde aber eben - weil sich nichts änderte nichts geändert wurde?
    Wenn das sogar ganz explizit so im Handbuch steht - dann könnte und wird das wohl so sein.

    Wie kann ich das sonst unterscheiden?
    Die Anzahl der von der WHERE-Klausel betroffenen Datensätze könnte dir ein vorheriges SELECT COUNT() auch liefern;
    je nachdem, was du mit dieser Anzahl anfangen willst, musst du dabei allerdings die time-of-check-to-time-of-use-Problematik beachten, bzw. das ganze notfalls in eine Transaktion mit Locking kapseln.
    [SIZE="1"]RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?[/SIZE]

    Kommentar


    • #3
      Ich würde gerne ein UPDATE machen, wenn Satz vorhanden und wenn nicht ein INSERT. Leider hab ich keinen Key den ich mittals ON KEY EXIST UPDATE machen könnte daher muss ich das zu Fuß machen..

      -> Versuch UPDATE
      -> Wenn kein entsprechender Satz vorhanden
      -> INSERT

      Wie gesagt leider keine ID, da die beim ersten INSERT erst erzeugt werden würde.

      Ich versuche das Update:
      UPDATE tabTipps SET TippTor1='''' WHERE SpielIDRef=4061 AND Nickname='Franzi'

      Erhalte dann das nichts upgedatet wurde:
      mysql_affected_rows() -> 0

      Versuche dann ein INSERT:
      INSERT INTO tabTipps (Nickname, SpielIDRef, TippTor1) VALUES ('Franzi', 4061, '')

      Bekommen dann Fehler das schon da ist (Ich habe einen unique constraint(Nickname, SpielIDRef)
      Duplicate entry 'Franzi-4061' for key 'NicknameUndSpielIDRef'/---------

      Juergen
      The string "()()" is not palindrom but the String "())(" is.

      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
      PHP.de Wissenssammlung | Kein Support per PN

      Kommentar


      • #4
        Der Befehl dazu lautet
        Code:
        REPLACE INTO
        http://dev.mysql.com/doc/refman/5.0/en/replace.html

        Gruß
        [URL]http://hallophp.de[/URL]

        Kommentar


        • #5
          Oder etwas performanter:
          INSERT ... ON DUPLICATE KEY UPDATE ...
          "My software never has bugs, it just develops random features."
          "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

          Kommentar


          • #6
            Zitat von Asipak Beitrag anzeigen
            Der Befehl dazu lautet
            Code:
            REPLACE INTO
            MySQL :: MySQL 5.0 Reference Manual :: 12.2.7 REPLACE Syntax
            Gruß
            Danke schau ich mir an!

            Zitat von Paul.Schramenko Beitrag anzeigen
            Oder etwas performanter:
            INSERT ... ON DUPLICATE KEY UPDATE ...
            Ich habe leider keinen Key, da der erst beim ersten INSERT erstellt werden würde, ich habe auf 2 Spalten einen unique constrain und mit dem funktioniert das aber leider nicht.

            danke!
            The string "()()" is not palindrom but the String "())(" is.

            Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
            PHP.de Wissenssammlung | Kein Support per PN

            Kommentar


            • #7
              Zitat von hausl Beitrag anzeigen
              Ich habe leider keinen Key, da der erst beim ersten INSERT erstellt werden würde, ich habe auf 2 Spalten einen unique constrain und mit dem funktioniert das aber leider nicht.
              Ähm ich glaube du verstehst nicht ganz, wie das funktioniert:
              Es wird versucht zu inserten, wenn dabei ein Fehler auftritt, dass der es einen doppelten primary key gibt, wird statt einem Insert ein Update auf denselben Schlüssel gemacht. Macht im Endeffekt so ziemlich das gleiche wie REPLACE INTO nur das es performanter ist.
              "My software never has bugs, it just develops random features."
              "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

              Kommentar


              • #8
                Aber diesen Fehler kann es nicht geben weil ich bei dem INSERT Befehl keinen Key habe zum übergeben ins SQL-Statement.

                Ich hab die drei Tabellen
                - User
                - Spiele
                - Tipps

                Der User bekommt alle Spiele als Liste (Form) zum tippen. Wenn der nun bei einem oder mehrere Spiele tippt, dann schreibe ich in die Tabelle Tipps den Nickname und die ID eines jeweiligen Spieles und das Ergbnis TOR1 und TOR 2 in die Tipptabelle. Dabei wird von MySQL autom. die TippID dazu erzeugt.

                Ich habe somit nur den Nickname und die SpielID um den Satz von den Tipps eindeutig zu erkennen das sind eben aber 2 Werte.

                Würde so aussehen, wenn der tippt:
                INSERT INTO tabTipps (Nickname, SpielIDRef, TippTor1) VALUES ('Franzi', 4061, 2)

                Also ich werde es jedenfalls mit REPLACE versuchen
                REPLACE INTO tabTipps (Nickname, SpielIDRef, TippTor1) VALUES ('Franzi', 4061, 2)


                Juergen
                The string "()()" is not palindrom but the String "())(" is.

                Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                PHP.de Wissenssammlung | Kein Support per PN

                Kommentar


                • #9
                  Aber diesen Fehler kann es nicht geben[...]
                  Bekommen dann Fehler das schon da ist (Ich habe einen unique constraint(Nickname, SpielIDRef)
                  Duplicate entry 'Franzi-4061' for key 'NicknameUndSpielIDRef'/---------
                  Du hast immer noch nicht verstanden! Probiere bitte auch die Variante von Paul.Schramenko aus und schau mal in das MySQL - Handbuch. Dann kannst du noch mal urteilen.
                  [URL]http://hallophp.de[/URL]

                  Kommentar


                  • #10
                    Ja, ich muss es versuchen, kann ich aber leider erst morgen abend...

                    Ich verstehe schon den Knackpunkt, aber mir wurde an anderer Stelle gesagt das für dieses Statement "INSERT ... ON DUPLICATE KEY UPDATE ..." das mit "... UNIQUE CONSTRAINT(Nickname, SpielIDRef)" nicht funkioniert, weil es 2 Spalten betrifft.

                    Probieren geht zwar über studieren, aber deshalb und weil ich heute nicht kann hab ich die Variante aussen vor gelassen..

                    Aber wie gesagt ich versuche es gerne und wenn es denn geht, dann ist es umso erfreulicher für mich!
                    The string "()()" is not palindrom but the String "())(" is.

                    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                    PHP.de Wissenssammlung | Kein Support per PN

                    Kommentar


                    • #11
                      Vielleicht hilft dir INSERT IGNORE weiter.
                      [PHP]if ($var != 0) {
                      $var = 0;
                      }[/PHP]

                      Kommentar


                      • #12
                        INSERT ... ON DUPLICATE KEY UPDATE ...
                        Danke, es tut jetzt genau was es soll!!
                        The string "()()" is not palindrom but the String "())(" is.

                        Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                        PHP.de Wissenssammlung | Kein Support per PN

                        Kommentar

                        Lädt...
                        X