Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] MySQL UPDATE tut nichts

Einklappen

Neue Werbung 2019

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

  • [Erledigt] MySQL UPDATE tut nichts

    Hallo Leute,

    hat jemand von euch eine Erklärung warum

    PHP-Code:
        $test 28;
        
    $sql "UPDATE `TM_user` SET `status` = 2 AND  `nickname` = '_' WHERE id = '$test'";
        echo 
    $sql;
        
    $qry mysql_query($sql) or die(mysql_error());
        echo 
    "<br>".mysql_affected_rows(); 
    folgende Ausgabe erzeugt:
    Code:
    UPDATE `TM_user` SET `status` = 2 AND `nickname` = '_' WHERE id = '28'
    0
    Also 0 Zeilen geupdatet (so ist es auch) aber der Datensatz mit der id 28 existiert mit 100%iger Sicherheit. Error Reporting ist natürlich voll aufgedreht...

  • #2
    Aaaahhhh da muss ja auch nen Komma hin und kein AND. Dann funktionierts auch, aber warum bekomm ich keinen Fehler??

    Kommentar


    • #3
      Ich denke, weil es zu einem boolschen Wert getyped wird.

      2 AND `nickname` = '_' würde dann TRUE entsprechen (was wiederum 1 von Typ TINYINT(1) entspricht ).
      Refining Linux: “[url=http://www.refining-linux.org/archives/65/Performing-push-backups-Part-1-rdiff-backup/]Performing Push Backups – Part 1: rdiff-backup[/url]”

      Kommentar


      • #4
        So ein Blödsinn

        Kommentar


        • #5
          Aber wenn ichs mir Recht überlege, dann ergibt deine Annahme doch keinen Sinn, weil die affected_rows wären dann ja trotzdem 1 und nicht 0

          Kommentar


          • #6
            Müßte so gehen :
            $sql
            = "UPDATE `TM_user` SET `status` = '2' AND `nickname` = '_' WHERE id = '".$test."';";

            Gruß
            I like cooking my family and my pets.
            Use commas. Don't be a psycho.
            [URL="http://jscouch.de"]Blog[/URL] - [URL="http://coverflowjs.github.io/coverflow/"]CoverflowJS[/URL]

            Kommentar


            • #7
              Zitat von rudygotya Beitrag anzeigen
              Müßte so gehen :
              $sql
              = "UPDATE `TM_user` SET `status` = '2' AND `nickname` = '_' WHERE id = '".$test."';";

              Gruß
              Das ist absoluter Blödsinn...

              Kommentar


              • #8
                Kann es sein das deine Spalte id gar kein varchar ist? Du behandelst es nämlich wie einen. Lass mal die ' bei der id weg. Dann sollte es glaub ich funktionieren. Zumindest hab ich die gleichen Probleme gehabt, wenn ich mit nem String eine int-Spalte überprüft habe.

                Kommentar


                • #9
                  Zitat von SJahr Beitrag anzeigen
                  Kann es sein das deine Spalte id gar kein varchar ist? Du behandelst es nämlich wie einen. Lass mal die ' bei der id weg. Dann sollte es glaub ich funktionieren. Zumindest hab ich die gleichen Probleme gehabt, wenn ich mit nem String eine int-Spalte überprüft habe.
                  Klar ist die kein varchar, aber das ist ja nicht das Problem, außerdem hab ich die ' ' in meinem Code oben auch nicht drin

                  Das funktioniert:
                  Code:
                  UPDATE `TM_user` SET `status` = 2, `nickname` = '_' WHERE id = '$test'
                  ABER das funktioniert nicht:

                  Code:
                  UPDATE `TM_user` SET `status` = 2 AND  `nickname` = '_' WHERE id = '$test'
                  Schuld ist hier das AND. Aber warum kommt keine Fehlermeldung? Und selbst wenn das AND irgendwelche Werte verknüpfen würde, wären die betroffenen Datensätze immer noch 1 und nicht 0, denn am WHERE wird ja nichts geändert...

                  Kommentar


                  • #10
                    Wer lesen kann ist klar im Vorteil Ich natürlich mal wieder nicht

                    Ich meine mich aber zu erinnern, mal das gleiche Problem wie du gehabt zu haben.

                    Kommentar


                    • #11
                      Da scheint es sich doch um einen Bug im SQL-Parser zu handeln. Ich habe dazu auch noch ein Beispiel:
                      Code:
                      mysql> SELECT * FROM top11;
                      +----+---------+--------+--------+
                      | id | s1      | s2     | s3     |
                      +----+---------+--------+--------+
                      |  1 | Basel   | Bern   | Zürich | 
                      |  3 | Zürich  | Bern   | Basel  | 
                      |  2 | Bern    | Zürich | Basel  | 
                      +----+---------+--------+--------+
                      3 rows in set (0.00 sec)
                      
                      mysql> UPDATE top11 SET s1 = 'Genf' AND s2 = 'Luzern' WHERE id = 3;
                      Query OK, 1 row affected, 1 warning (0.00 sec)
                      Datensätze gefunden: 1  Geändert: 1  Warnungen: 0
                      
                      mysql> SELECT * FROM top11;
                      +----+-------+--------+--------+
                      | id | s1    | s2     | s3     |
                      +----+-------+--------+--------+
                      |  1 | Basel | Bern   | Zürich | 
                      |  3 | 0     | Bern   | Basel  | 
                      |  2 | Bern  | Zürich | Basel  | 
                      +----+-------+--------+--------+
                      3 rows in set (0.00 sec)
                      D.h. es scheint tatsächlich so, als ob der Ausdruck als Boolean ausgewertet würde.
                      Gruss
                      L

                      Kommentar


                      • #12
                        Zitat von cycap Beitrag anzeigen
                        Das ist absoluter Blödsinn...
                        Wo ist das denn Blödsinn?? Er kann doch nicht in den query ne Variable einfügen ohne die strings zu verknüpfen. Für mich sieht der Fehler nunmal so einfach aus...
                        I like cooking my family and my pets.
                        Use commas. Don't be a psycho.
                        [URL="http://jscouch.de"]Blog[/URL] - [URL="http://coverflowjs.github.io/coverflow/"]CoverflowJS[/URL]

                        Kommentar


                        • #13
                          Zitat von rudygotya Beitrag anzeigen
                          Wo ist das denn Blödsinn?? Er kann doch nicht in den query ne Variable einfügen ohne die strings zu verknüpfen. Für mich sieht der Fehler nunmal so einfach aus...
                          Das ist nochmals Blödsinn. Lies mal im Manual den Unterschied zwischen einfachen und doppelten Anführungszeichen nach!
                          Gruss
                          L

                          Kommentar


                          • #14
                            @lazy: Ja das scheint ein Bug zu sein, aber wieso hast du eine affected row und ich nicht? Mal abgesehen davon sollte in beiden Fällen ein Syntax Erorr kommen, welche MySQL Version hast du denn?

                            Kommentar


                            • #15
                              Ich habe 5.0.22 (CENTOS 5). Es sieht wirklich so aus, dass alles zwischen dem «SET x =» und entweder dem Komma oder dem nächsten SQL-Schlüsselwort irgendwie interpretiert wird. Das geht auch mit SELECT:
                              Code:
                              mysql> SELECT  'Genf' AND s2 = 'Luzern' from top11;
                              +--------------------------+
                              | 'Genf' AND s2 = 'Luzern' |
                              +--------------------------+
                              |                        0 | 
                              |                        0 | 
                              |                        0 | 
                              +--------------------------+
                              3 rows in set, 3 warnings (0.00 sec)
                              In einer WHERE-Klausel wäre der Ausdruck u.U. sogar korrekt.
                              Aber warum bei mir ein Update gemacht wird, und bei dir nicht, kann ich auch nicht sagen.
                              Wenn ich dann noch die SQL-Warnungen einschalte, wirds noch spannender:
                              Code:
                              Warning (Code 1292): Falscher DOUBLE-Wert gekürzt: 'Genf'
                              Das erscheint natürlich für jede Zeile. D.h. es ist auch kein Boolean-Wert.
                              Gruss
                              L

                              Kommentar

                              Lädt...
                              X