zitteraal: You have an error in your SQL syntax

Hallo.

Habe noch nicht so viel mit MySQL gearbeitet, aber jetzt versteh ich nicht, warum MySQL bei dieser SQL-Anweisung motzt:

  
  //Username für die komplette Session verfügbar machen  
  $_SESSION['USERNAME']=$user;  
  
  //Datum plus Uhrzeit für den SQL-String  
  $datetime=date("Y-m-d H:i:s");  
  
  //SQL-String zum Eintragen der Felder "letzter-login" und "session-id"  
  $SQLstr="UPDATE 'users' SET 'letzer-login' = '".$datetime."', 'session-id' = '".session_id()."' WHERE 'USER' = '".$_SESSION['USERNAME']."'";  
  
  //SQL-String ausführen, bei Fehler mit Fehlermeldung sterben  
  $res=mysql_query($SQLstr) or die (mysql_error());  

Das Feld "letzter-login" hat den Typ datetime, das Feld "session-id" den Typ "text".

Dazu kommt noch, dass der SQL-Code aus phpmyadmin herauskopiert wurde, und dort hat er funktioniert. Natürlich ist das oben nicht exakt der Code aus phpmyadmin, nur die wichtigsten Teile hab ich drin gelassen, die Werte die eingetragen werden sollen hab ich abhängig vom eingeloggtem User gemacht.

MySQL gibt mir folgende Fehlermeldung aus:
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 ''users' SET 'letzer-login' = '2006-02-03 11:05:15', 'session-id' = 'fa5ba95e0913' at line 1

Könnt ihr mir helfen? Dankeschön
zitteraal

  1. moin zitteraal :)

    //SQL-String zum Eintragen der Felder "letzter-login" und "session-id"
      $SQLstr="UPDATE 'users' SET 'letzer-login' = '".$datetime."', 'session-id' = '".session_id()."' WHERE 'USER' = '".$_SESSION['USERNAME']."'";

    Ich hab leider keine Ahnung von PHP aber von der SQL-Syntax her würde ich die ' beim Namen der Tabelle und der Spalte weglassen.

    liebe Grüße aus Berlin
    lina-

    --
    Self-Code: ie:% fl:( br:^ va:) ls:/ fo:| rl:( ss:) de:] js:| mo:)
    1. hi lina-

      Ich hab leider keine Ahnung von PHP aber von der SQL-Syntax her würde ich die ' beim Namen der Tabelle und der Spalte weglassen.

      Naja, ich hab den Code doch aus phpmyadmin raus, und da hat er funktioniert.
      PS: Code funktioniert ohne Anführungszeichen genausogut wie mit.

      Danke trotzdem :-)
      zitteraal

    2. Die ' brauchst du, wegen dem - in session-id, grundlegend würde ich hier mit _ arbeiten oder camel caps like.

      Tausche mal in deinem Script ' gegen ` (kannst du markieren und kopieren) aus und probiers nochmal.

      Gruß
      Joah.

      1. Hi

        Tausche mal in deinem Script ' gegen ` (kannst du markieren und kopieren) aus und probiers nochmal.

        Jetzt siehts gut aus. Also syntaktisch ist jetzt alles anscheinend korrekt. Nur kommt jetzt die Fehlermeldung "Unknown column 'Antje' in 'where clause'".
        Die Lösung lautet wie folgt:

        $SQLstr="UPDATE users SET letzer-login = '".$datetime."', session-id = '".session_id()."' WHERE USER= '".$_SESSION['USERNAME']."'";

        MySQL macht also nen Unterschied zwischen ' und ` . Find ich unnötig, aber was soll man tun.

        Danke euch, Problem gelöst
        zitteraal

        1. Hello,

          Jetzt siehts gut aus. Also syntaktisch ist jetzt alles anscheinend korrekt. Nur kommt jetzt die Fehlermeldung "Unknown column 'Antje' in 'where clause'".
          Die Lösung lautet wie folgt:

          $SQLstr="UPDATE users SET letzer-login = '".$datetime."', session-id = '".session_id()."' WHERE USER= '".$_SESSION['USERNAME']."'";

          Dann kann das nicht Dein SQL-Statement gewesen sein...

          MySQL macht also nen Unterschied zwischen ' und ` . Find ich unnötig, aber was soll man tun.

          Die Backticks sind "Escapezeichen" und Begrenzer in einem. Sie zeigen MySQL an, dass der Programmierer sich nicht um reservierte Worte kümmern will.

          Harzliche Grüße vom Berg
          http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau

  2. Hello,

    $SQLstr = "UPDATE users ".
                 "SET letzer-login = '".$datetime."', session-id = '".session_id().
                 "' WHERE USER = '".$_SESSION['USERNAME']."'";

    Die Häkchen für Tabellen und Spaltennamen benötigt man nur, wenn man solche mit reservierten Worten belegt hat. Die sogenannten Backticks zeigen MySQL dann an, dass es in diesem Fall kein reserviertes Wort ist.

    Harzliche Grüße vom Berg
    http://www.annerschbarrich.de

    Tom

    --
    Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
    Nur selber lernen macht schlau