Fred: MySQL-Fehlermeldung bei eintrag per PHP

Hallo,

ich habe folgenden Code:

  
$exp = explode(" ", $titel);  
  
mysql_query("UPDATE such_mich SET such1 = $exp[0], such2 = $exp[1], such3 = $exp[2], such4 = $exp[3], such5 = $exp[4], such6 = $exp[5], WHERE id = '$id' ") or die (mysql_error());  

Titel ist eine Zeile die mehrere Wörter enthält, ich möchte diese Wörter einzeln speichern um gezielt nach diesen Begriffen etwas abrufen zu können (ja, ich weiß das ich das auch einfach per LIKE abrufen kann, aber für meine Zwecke benötige ich es anders)

Wenn ich aber nun das Script aufrufe kommt eine MySQL-Fehlermeldung:

  
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 ' such4 = buch, such5 = zum, such6 = kaufen, WHERE id = '169'' at line 1  

ich hab überlegt und rumprobiert, aber leider kann ich den Fehler nicht finden.
Und das MySQL-Handbuch hat mich auch nicht schlauer gemacht.

Danke schonmal, Fred

  1. Hello,

    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 ' such4 = buch, such5 = zum, such6 = kaufen, WHERE id = '169'' at line 1

    es hilft immer, sich das fertige Statement mal per echo ausgeben zu lassen, so sieht man die Fehler schneller - vor allem auch dann, wenn sie durch Variableninhalte entstehen. In deinem Fall (ich sag mal nichts zur Datenstruktur) fällt mir insbesondere auf, dass du Strings offenbar nicht mit ' (Singlequotes) versehen hast. Sind such1-3 Zahlen? Eigentlich hätte ich den Fehler sonst schon dort erwartet...  
      
    MfG  
    Rouven  
    
    -- 
    \-------------------  
    Vegetarier essen meinem Essen das Essen weg.
    
    1. Hallo,

      lass das Komma vor dem WHERE weg dann sollte es funktionieren:

        
      mysql_query("UPDATE such_mich SET such1 = $exp[0], such2 = $exp[1], such3 = $exp[2], such4 = $exp[3], such5 = $exp[4], such6 = $exp[5] WHERE id = '$id' ") or die (mysql_error());  
      
      

      Gruß
      mabol86

  2. Moin,

    $exp = explode(" ", $titel);

    mysql_query("UPDATE such_mich SET such1 = $exp[0], such2 = $exp[1], such3 = $exp[2], such4 = $exp[3], such5 = $exp[4], such6 = $exp[5], WHERE id = '$id' ") or die (mysql_error());

      
    Das Komma und die Hochkommta wurde ja bereits angesprochen. Ich würde dir - aus eigner Erfahrung - empfehlen, den String mit der Anfrage vorher zu konstruieren, und zwar mit Hilfe des Konkatenationsoperators:  
      
    ~~~php
      
    $sql = "UPDATE such_mich" .  
           "SET " .  
           "such1 = '" . $exp[0] . "' " .  
           "such2 = '" . $exp[1] . "' " .  
           "such3 = '" . $exp[2] . "' " .  
           "such4 = '" . $exp[3] . "' " .  
           "such5 = '" . $exp[4] . "' " .  
           "such6 = '" . $exp[5] . "' " .  
           "WHERE id = '" . $id . "'");  
      
    mysql_query($sql);  
    if(mysql_errno() != 0) {  
      echo $sql;  
      die(mysql_error);  
    }  
    
    

    Gruß

    Stareagle

    1. Hi stareagle!

      Ich würde dir - aus eigner Erfahrung - empfehlen, den String mit der Anfrage vorher zu konstruieren, und zwar mit Hilfe des Konkatenationsoperators:

      Wieso? Whitespaces werden sowieso ignoriert:

        $sql = "UPDATE such_mich  
                SET  
                such1 = '" . $exp[0] . "',  
                such2 = '" . $exp[1] . "',  
                such3 = '" . $exp[2] . "',  
                such4 = '" . $exp[3] . "',  
                such5 = '" . $exp[4] . "',  
                such6 = '" . $exp[5] . "'  
                WHERE id = '" . $id . "'";
      

      Außerdem haben die Kommata gefehlt.

      MfG H☼psel

      --
      "It's amazing I won. I was running against peace, prosperity, and incumbency."
      George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
      Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
      1. echo $begrüßung;

        $sql = "UPDATE such_mich

        SET
                  such1 = '" . $exp[0] . "',
                  such2 = '" . $exp[1] . "',
                  such3 = '" . $exp[2] . "',
                  such4 = '" . $exp[3] . "',
                  such5 = '" . $exp[4] . "',
                  such6 = '" . $exp[5] . "'
                  WHERE id = '" . $id . "'";

        
        >   
        > Außerdem haben die Kommata gefehlt.  
          
        Das Wichtigste fehlt immer noch: [mysql_real_escape_string()](http://de.php.net/manual/en/function.mysql-real-escape-string.php), um Sonderzeichen in $exp[x] und auch $id MySQL-gerecht zu behandeln.  
          
          
        echo "$verabschiedung $name";