keine_Ahnung: Richtige Syntax

Hi,

könnte mir jemand schnell sagen wie das richtig gehört???
MySQL-Client-Version: 5.0.24a

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' WHERE ID = 1'

"UPDATE *
   SET
    Spalte1 = $wert1,
    Spalte2 = '$text1',
    Spalte3 = $wert2,
    Spalte4 = $wert3
   WHERE ID = 1"

Danke

  1. Hi,

    könnte mir jemand schnell sagen wie das richtig gehört???
    MySQL-Client-Version: 5.0.24a

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' WHERE ID = 1'

    "UPDATE *
       SET
        Spalte1 = $wert1,
        Spalte2 = '$text1',
        Spalte3 = $wert2,
        Spalte4 = $wert3
       WHERE ID = 1"

    Danke

    Ich sehe massenhaft Potenzial für SQL injection, dafür aber keinen Tabellennamen. Stellst Du sowas ins Internet? Dann sorge für ein gutes Backup, Du wirst es brauchen.

    Alexander

    1. Hi,

      könnte mir jemand schnell sagen wie das richtig gehört???
      MySQL-Client-Version: 5.0.24a

      You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' WHERE ID = 1'

      "UPDATE *
         SET
          Spalte1 = $wert1,
          Spalte2 = '$text1',
          Spalte3 = $wert2,
          Spalte4 = $wert3
         WHERE ID = 1"

      Danke

      Ich sehe massenhaft Potenzial für SQL injection, dafür aber keinen Tabellennamen. Stellst Du sowas ins Internet? Dann sorge für ein gutes Backup, Du wirst es brauchen.

      Alexander

      Statt dem * habe ich natürlich einen Tabellennanmen. Das ist laut Fehlermeldung ja wohl auch nicht das Problem, oder?
      Ich speichere damit Werte in eine Datenbank die mein Statistikskript aus einer anderen geholt halt. Das sollte doch kein Problem sein oder? Also sicherheitstechnisch.

      1. Statt dem * habe ich natürlich einen Tabellennanmen. Das ist laut Fehlermeldung ja wohl auch nicht das Problem, oder?

        Dann poste bitte den Origialcode, keine sinnentstellte, zensierte Variante desselben.

        Ich speichere damit Werte in eine Datenbank die mein Statistikskript aus einer anderen geholt halt. Das sollte doch kein Problem sein oder? Also sicherheitstechnisch.

        Wenn Du fragen mußt, ist es ein Sicherheitsproblem. Wenn Du beweisen kannst (im Sinne eines mathematischen Beweises), dass Dein Statement mitsamt seiner Umgebung keine Sicherheitslücke ist, ist es kein Sicherheitsproblem.

        Alexander

        1. "UPDATE TBA
             SET
              Spalte1 = $wert1,
              Spalte2 = '$text1',
              Spalte3 = $wert2,
              Spalte4 = $wert3
             WHERE ID = 1"

          So mit Tabellenname. Ich hab schon alles Mögliche bei ID versicht die 1 mit Klammern und Anführungszeichen, das ID mit den Strichen aber ich bekomme immer die Fehlermeldung das die Syntax nicht stimmt.

          Wenn Du fragen mußt, ist es ein Sicherheitsproblem. Wenn Du beweisen kannst (im Sinne eines mathematischen Beweises), dass Dein Statement mitsamt seiner Umgebung keine Sicherheitslücke ist, ist es kein Sicherheitsproblem.

          Das ist mir jetzt nicht 100 pro klar was du meins. Natürlich gibt es irgendwo einen User der eine Eingabe macht. Diese Eingabe wird auch überprüft aber ob ich wirklich alle Möglichkeiten ausgeschlossen habe das da auch Werte eingetragen werden können die so nicht gedacht sind kann gut sein.

          1. Hi,

            So mit Tabellenname. Ich hab schon alles Mögliche bei ID versicht die 1 mit Klammern und Anführungszeichen, das ID mit den Strichen aber ich bekomme immer die Fehlermeldung das die Syntax nicht stimmt.

            Laut Fehlermeldung liegt der Fehler VOR der WHERE-Klausel. Mach Testausgaben von allen Variablen, die Du da reinfütterst, bzw. lass mal den resultierenden SQL-String ausgeben, da solltest Du dann auf den ersten Blick sehen, was fehlt.

            LG

            1. Laut Fehlermeldung liegt der Fehler VOR der WHERE-Klausel. Mach Testausgaben von allen Variablen, die Du da reinfütterst, bzw. lass mal den resultierenden SQL-String ausgeben, da solltest Du dann auf den ersten Blick sehen, was fehlt.

              Jup richtig. Eine der Variablen war noch ein Sting und kein int wie die Spalte verlangt.

              Danke für die Hilfe!

          2. "UPDATE TBA
               SET
                Spalte1 = $wert1,
                Spalte2 = '$text1',
                Spalte3 = $wert2,
                Spalte4 = $wert3
               WHERE ID = 1"

            Ich würde tippen, dass du die ' vergessen hast, wenn es sich bei den Spalten um String-spalten handelt.

            also Spalte1 = '$wert1'

            oder Spalte1 = "$wert1"

            oder wenns noch Probleme gibt und das ganze in PHP ist auch mal so probieren:

            "UPDATE... '".$wert1."' Spalte2 = '".$wert2."'

            Gruß!

            1. Moin!

              "UPDATE TBA
                 SET
                  Spalte1 = $wert1,
                  Spalte2 = '$text1',
                  Spalte3 = $wert2,
                  Spalte4 = $wert3
                 WHERE ID = 1"

              Ich würde tippen, dass du die ' vergessen hast, wenn es sich bei den Spalten um String-spalten handelt.

              MySQL unterscheidet nicht zwischen String-Spalten und Nicht-String-Spalten. Alle Datenwerte gehören a) escaped und b) in einfache 'Quotes'.

              Davon abweichen darf man nur, wenn, wie erwähnt, beweisbar 100% sicher ist, dass keine Injections von schädlichen Zeichen stattfinden können.

              - Sven Rautenberg

              --
              "Love your nation - respect the others."
          3. "UPDATE TBA

            Sind das im Original backticks (ASCII 96)? Was sollen die rund um den Tabellennamen?

            Alexander

            1. In diesem Fall wohl nicht notwendig. Generell verwendet man die, um MySQL zu sagen, dass das ein Tabellenname ist (für den Fall, dass man mal reservierte Wörter als Namen benutzt). Gilt übrigens auch für Spaltennamen.

              LG

              1. In diesem Fall wohl nicht notwendig. Generell verwendet man die, um MySQL zu sagen, dass das ein Tabellenname ist (für den Fall, dass man mal reservierte Wörter als Namen benutzt). Gilt übrigens auch für Spaltennamen.

                Wieder was gelernt. Alle DBs, die ich kenne, nutzen dafür Double Quotes, und ich denke, dass es auch so im SQL Standard einzementiert ist. MySQL kann zumindest mit etwas Gewalt ("SET sql_mode='ANSI_QUOTES'") dazu gebracht werden, sich wie eine Standard-DB zu verhalten, was das angeht.

                Alexander

  2. Hi,

    könnte mir jemand schnell sagen wie das richtig gehört???
    MySQL-Client-Version: 5.0.24a

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' WHERE ID = 1'

    "UPDATE *
       SET
        Spalte1 = $wert1,
        Spalte2 = '$text1',
        Spalte3 = $wert2,
        Spalte4 = $wert3
       WHERE ID = 1"

    Danke

    Du hast keinen Tabellennamen angegeben!?