Whitsnake: Warum funktioniert dieses INSERT nicht?

Ich habe eine Datenbank, an der Verbindung liegt es nicht.

Die Struktur der verlangen Tabelle "session" ist wie folgt:

"key" varchar(255) not null, primary key
"user_id" int(9) not null
"autologout" int(12) not null

So und jetzt möchte ich folgendes machen und es tut sich in der Tabelle rein gar nichts.

$key = "12";
    $response = "12";
    $autologout = "12";
    mysql_query("INSERT INTO sessions (key, user_id, autologout) VALUES ('$key', '$response', '$autologout');");

Ich möchte dazu sagen, dass er sich korrekt verbindet etc. Andere Inserts in Tabellen wo ein einen Primärschlüssel der automatisch hochgezählt wird funken perfekt. Nur dieser nicht. Andererseits müsste sowas trotzdem gehen.

Wer sieht meinen Denkfehler?

  1. Moin!

    Wer sieht meinen Denkfehler?

    Was sagt die DB dazu? Die gibt dir doch die Fehlermeldung in mysql_error() zurück.

    • Sven Rautenberg
    1. Das sagt folgendes:

      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 'key, user_id, autologout) VALUES ('12', '12', '12')' at line 1

  2. Tach auch,

    mysql_query("INSERT INTO sessions (key, user_id, autologout) VALUES ('$key', '$response', '$autologout');");

    Kann es sein, dass es am (ungewollten) doppelten Semikolon liegt? Aber ob das das Problem löst bezweifle ich.

    That's it -
    xola

    --
    Was haben Windows, ein Papierflieger und Prinz Albert von Monaco gemeinsam?
    Alle sind extrem absturzgefährdet
  3. Hi,

    "key" varchar(255) not null, primary key

    key ist ein reserved keyword in Mysql. Wenn Du das als Spaltennamen nutzen willst, mußt Du den immer mit Backticks quoten.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Schon beim generieren der Tabelle oder einfügen?

      Wie sieht das dann beim einfügen aus?

      INSERT INTO sessions (\key ... ?

      1. Hi,

        Schon beim generieren der Tabelle oder einfügen?

        Ich würd's immer machen (oder eben einen anderen Spaltennamen nehmen).

        Wie sieht das dann beim einfügen aus?
        INSERT INTO sessions (\key ... ?

        Backticks, nicht Backslashes.

        cu,
        Andreas

        --
        Warum nennt sich Andreas hier MudGuard?
        Schreinerei Waechter
        Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
        1. mysql_query("INSERT INTO sessions (``key, user_id, autologout) VALUES ('$key', '$response', '$autologout');");

          funkt leider auch nicht. Ich würd schon gerne den key übergehen, aber wir sollen für eine Übung ein Backend basteln, dass Befehle des Frontends endgegennimmt und umsetzt.

          1. Hi,

            mysql_query("INSERT INTO sessions (key, user_id, autologout) VALUES ('$key', '$response', '$autologout');");

            Du musst es mit backticks einschliessen. Das Wort "quoten" find ich in dem Zusammenhang sehr irreführend

  4. Moin,

    mysql_query("INSERT INTO sessions (key, user_id, autologout) VALUES ('$key', '$response', '$autologout');");

    Versuche mal dieses Query:

    mit der Belgegung, weil int:

    $response=12;
    $autologout=12;

    $mysql_query="INSERT INTO sessions (key, user_id, autologout) VALUES ('".$key."', $response, $autologout)";

    Und BTW: print mysql_error(); Hilft auch.
    Dein Query String hatte weitaus mehr als einen Fehler!

    regds
    Mike©

    --
    Freunde kommen und gehen. Feinde sammeln sich an.
    1. Moin

      Und BTW: print mysql_error(); Hilft auch.
      Dein Query String hatte weitaus mehr als einen Fehler!

      und Nachtrag, Danke MudGuard, key = Reserved.

      regds
      Mike©

      --
      Freunde kommen und gehen. Feinde sammeln sich an.
    2. Funkt leider auch nicht.

      1. Moin

        »» Funkt leider auch nicht.

        Klar. SQL funkt auch nicht ;-)

        Was sagt print mysql_error();  dazu? Unter Beachtung des umbenannten Feldes key?

        regds
        Mike©

        --
        Freunde kommen und gehen. Feinde sammeln sich an.
        1. Mein SQL findet es gut ;) key schmeckte ihm als Spaltenname gar nicht.

      2. Ich habe das gleiche Prob.:

        INSERT INTO 'bilder_alben' SET name='buchmesse 2004', dir='bilder/alben/buchmesse 2004/', timestamp=NOW()

        Ich bekomme die gleiche Fehlermeldung. Ich habe schon verschiedene Schreibweisen ausprobiert, aber immer das gleiche.

        TIA

        1. Moin

          Ich habe das gleiche Prob.:

          Nein, hast Du nicht.

          INSERT INTO 'bilder_alben' SET name='buchmesse 2004', dir='bilder/alben/buchmesse 2004/', timestamp=NOW()

          Du hast Insert und Update gemischt.

          SET gehört zu Update und nicht zu INSERT.

          Lese nochmal das Handbuch zu SQL

          regds
          Mike©

          --
          Freunde kommen und gehen. Feinde sammeln sich an.
          1. Hi,

            INSERT INTO 'bilder_alben' SET name='buchmesse 2004', dir='bilder/alben/buchmesse 2004/', timestamp=NOW()

            Du hast Insert und Update gemischt.

            SET gehört zu Update und nicht zu INSERT.
            Lese nochmal das Handbuch zu SQL

            Meinst Du diese Stelle

            INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
                [INTO] tbl_name
                SET col_name={expr | DEFAULT}, ...
                [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]

            aus http://dev.mysql.com/doc/mysql/en/insert.html?

            cu,
            Andreas

            --
            Warum nennt sich Andreas hier MudGuard?
            Schreinerei Waechter
            Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
            1. Moin,

              Meinst Du diese Stelle

              INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
                  [INTO] tbl_name
                  SET col_name={expr | DEFAULT}, ...
                  [ ON DUPLICATE KEY UPDATE col_name=expr, ... ]

              du hast mich eiskalt erwischt :-( Diese Syntax habe ich noch nie für insert gesehen.

              *KNIRSCH* Tja, man lernt nie aus.

              regds
              Mike©

              --
              Freunde kommen und gehen. Feinde sammeln sich an.
        2. Hi,

          Ich habe das gleiche Prob.:

          Die Lösung dürfte die gleiche sein.

          INSERT INTO 'bilder_alben' SET name='buchmesse 2004', dir='bilder/alben/buchmesse 2004/', timestamp=NOW()

          timestamp sollte reserviert sein ==> in (nicht hinter) backticks.

          cu,
          Andreas

          --
          Warum nennt sich Andreas hier MudGuard?
          Schreinerei Waechter
          Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
          1. Moin Andreas,

            INSERT INTO 'bilder_alben' SET name='buchmesse 2004', dir='bilder/alben/buchmesse 2004/', timestamp=NOW()

            timestamp sollte reserviert sein ==> in (nicht hinter) backticks.

            damit hast Du wohl Recht, aber den abstrusen Query übersehen ;-)))

            regds
            Mike©

            --
            Freunde kommen und gehen. Feinde sammeln sich an.
            1. Hi,

              INSERT INTO 'bilder_alben' SET name='buchmesse 2004', dir='bilder/alben/buchmesse 2004/', timestamp=NOW()
              timestamp sollte reserviert sein ==> in (nicht hinter) backticks.
              damit hast Du wohl Recht, aber den abstrusen Query übersehen ;-)))

              siehe https://forum.selfhtml.org/?t=107380&m=666836

              cu,
              Andreas

              --
              Warum nennt sich Andreas hier MudGuard?
              Schreinerei Waechter
              Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
          2. Hi,

            timestamp sollte reserviert sein ==> in (nicht hinter) backticks.

            Hat aber bei mir bisher nie Probleme gemacht. Benutze das zwar wegen sauberen Programmierstil nicht mehr, aber alte Scripte aus meine PHP-Anfangszeit laufen, obwohl sie timestamp als Feldnamen haben