hansi: MySQL Syntaxfehler

Ich habe an dieser MySQL-Zeile aus PHP heraus bereits ziemlich lange herumexperimentiert. Aber ich kann den Fehler nicht finden... es liegt am Eintrag für die Spalte "alter", denn ohne diese Funktioniert alles.

$eintrag = "INSERT INTO testdb2 (alter, wohnort, datetime) VALUES ('kind', '$wohnort', NOW())";

Die Fehlermeldung lautet:
MySQL-Error: 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 'alter, wohnort, datetime) VALUES ('kindchen', 'anderer', NOW())' at line 1

Einige von euch werden den Fehler wahrscheinlich auf den ersten Blick sehen. Aber mein Auge ist noch nicht so geübt...

Wäre toll wenn mich jemand befreien könnte, so dass ich schlafen gehen kann. ;-)

Gruss hansi

  1. Hello,

    Wäre toll wenn mich jemand befreien könnte, so dass ich schlafen gehen kann. ;-)

    ...aber gerne doch: MySQL: Reserved Words.

    MfG
    Rouven

    --
    -------------------
    Let Bygones Be Bygones  --  Robert Pitscottie: "Chronicles of Scotland"
    1. Vielen Dank! Habe alter zu altersgruppe umbenannt.
      Da hätte ich noch ziemlich lange suchen müssen...

      Gruss hansi

      1. Vielen Dank! Habe alter zu altersgruppe umbenannt.
        Da hätte ich noch ziemlich lange suchen müssen...

        LOL - ich hatte eher "datetime" in Verdacht.

        $eintrag = "INSERT INTO testdb2 (alter, wohnort, datetime) VALUES ('kind', '$wohnort', NOW())";

        Ich glaube, wenn Du mit HOCHKOMMAalterHOCHKOMMA kommst, dann musst Du gar nichts umbenennen.

        1. Hello,

          Ich glaube, wenn Du mit HOCHKOMMAalterHOCHKOMMA kommst, dann musst Du gar nichts umbenennen.

          jein - du kannst unter MySQL die Backticks verwenden, also nicht das normale Hochkomma sondern das schräge (`). Im Gegensatz zu einer Umbenennung nimmst du deinem SQL-Code und wahrscheinlich auch deinem gesamten Datenmodell damit aber die Lauffähigkeit auf anderen Datenbanken, z.B. MS-SQL/Access, DB2 und Konsorten, die andere Escape-Zeichen für Schlüsselwörter verwenden (wie z.B. [] in den Microsoft Dialekten).

          MfG
          Rouven

          --
          -------------------
          He is entertaining both out of the car and in the car because if you tell him that a corner is almost flat then he is the guy who is going to try to take it flat even if it means shunting it the other side of it, he will come with the data and say 'hey, I may have crashed and destroyed the car, but I was flat-out'. That is an interesting quality that he has!  --  Team Member on Jacques Villeneuve
          1. Im Gegensatz zu einer Umbenennung nimmst du deinem SQL-Code und wahrscheinlich auch deinem gesamten Datenmodell damit aber die Lauffähigkeit auf anderen Datenbanken, z.B. MS-SQL/Access, DB2 und Konsorten, die andere Escape-Zeichen für Schlüsselwörter verwenden (wie z.B. [] in den Microsoft Dialekten).

            Vermute mal, dass der Fragesteller damit leben koennte.   :)

            Aber noch zu:
            INSERT
             testdb2
             (
             alter,
             wohnort,
             datetime
             )
             VALUES
             (
             'kind',
             '$wohnort',
             NOW()
             )

            • grauenhafter Tabellenname
            • merkwuerdige Mischung aüs englischen und deutschen Variablennamen
            • datetime denkbar schlechter Datenfeldname, was spricht gegen Zeitstempel oder Erstellungszeitpunkt?
          2. echo $begrüßung;

            Ich glaube, wenn Du mit HOCHKOMMAalterHOCHKOMMA kommst, dann musst Du gar nichts umbenennen.
            jein - du kannst unter MySQL die Backticks verwenden, also nicht das normale Hochkomma sondern das schräge (`).

            Kein "jein" sondern ein klares "nein", auch nicht "kannst" sondern "musst". Mit 'Hochkommas' statt Backticks ist alter ein String und kein Feldname. Strings haben an der Stelle im Insert aber nichts zu suchen. Man kann Strings keinen Wert zuweisen, der Versuch wird mit einer Fehlermeldung bestraft.

            echo "$verabschiedung $name";