ghostflasher: UPDATE mit variablen

Hallo,

ich habe ein problem einen UPDATE befehl bei einer php/mysql site auszuführen.

ich habe mit phpmyadmin folgende query erstellt:

$sql2 = 'UPDATE database.table SET
Year = '111111111',
Name = '222222222222',
Type = '3333',
KD = '444',
CT = '555',
size = '66',
rate = '777777777',
description = '8888888888888'
WHERE table.NR = 3 LIMIT 1;';

Das ganze funktioniert auch einwandfei.

Nun will ich aber variabeln einsetzen, was irgendwie nicht ganz klappen will. Beispiel:

$sql2 = 'UPDATE database.table SET
Year = ' . $var1 . ',
Name = ' . $var2 . ',
Type = ' . $var23 . ',
KD = ' . $var4 . ',
CT = ' . $var5 . ',
size = ' . $var6 . ',
rate =  ' . $var7 . ',
description =  ' . $var8 . ',
WHERE table.NR = 3 LIMIT 1;';

Es gibt keine Fehlermeldung, aber die Variablen werden auch nicht eingesetzt.
Wer kann mir helfen?

--
gruss
ghostflasher
  1. Hello,

    Nun will ich aber variabeln einsetzen, was irgendwie nicht ganz klappen will. Beispiel:

    $sql2 = 'UPDATE database.table SET
    Year = '' . mysql_escape_string($var1) . '',

    Auf die Häkchen bei String- und Datumssplatentypen darfst Du nicht verzeichten
    bitte benutzte mysql_escape_string() oder mysql_real_escape_string() oder eine
    vergleichbare Funktion zur Vorbereitung Deiner Werte für die Textschnittstelle

    Ganze Zahlen solltest Du mit intval() absichern. Sie können dann auch ohne Häkchen stehen.
    NULL und FALSE stehen ebenfalls ohne Häkchen.

    Es gibt keine Fehlermeldung, aber die Variablen werden auch nicht eingesetzt.
    Wer kann mir helfen?

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
  2. Hi!

    Wer kann mir helfen?

    Zur Not: bete;-)

    Aber zunächst versuche bitte mal ein echo $sql2;
    _ohne_ die Query an den DB-Server zu leiten und teile dem Forum das Ergebnis mit.
    Die Ausgabe einer DB-Server-Fehlermeldung kann (nach Ausführung) unbedingt zweckdienliche Hinweise für die Verhaftung des Delinquenten geben.

    off:P'Déja-vu'P

    --
    "You know that place between sleep and awake, the place where you can still remember dreaming?" (Tinkerbell)
  3. Hi,

    $sql2 = 'UPDATE `database`.`table` SET  
    `Year` = ' . $var1 . ',  
    `Name` = ' . $var2 . ',  
    `Type` = ' . $var23 . ',  
    `KD` = ' . $var4 . ',  
    `CT` = ' . $var5 . ',  
    `size` = ' . $var6 . ',  
    `rate` =  ' . $var7 . ',  
    `description` =  ' . $var8 . ',  
    WHERE `table`.`NR` = 3 LIMIT 1;';
    

    Verwendung von [code]-Tags macht das ganze besser lesbar.

    Es gibt keine Fehlermeldung, aber die Variablen werden auch nicht eingesetzt.

    error_reporting auf E_ALL, display_errors auf on?
    Wie kontrolliert - Kontrollausgabe?
    Variablen vorhanden? (Warum so komisch benannt - sicher, dass du keine Arrays verwenden willst? Das ist fast immer der Fall, wenn jemand anfängt, Variablennamen "durchzunummerieren".)

    Dass die SQL-Syntax nicht mehr stimmt, sobald du da nicht-nummerische Werte verwendest, ist dir klar?

    Und informiere dich über SQL Injection, und was man dagagen unternehmen muss.

    MfG ChrisB

    --
    Light travels faster than sound - that's why most people appear bright until you hear them speak.
    1. Hi,

      $sql2 = 'UPDATE database.table SET

      Year = ' . $var1 . ',
      Name = ' . $var2 . ',
      Type = ' . $var23 . ',
      KD = ' . $var4 . ',
      CT = ' . $var5 . ',
      size = ' . $var6 . ',
      rate =  ' . $var7 . ',
      description =  ' . $var8 . ',
      WHERE table.NR = 3 LIMIT 1;';

      
      >   
      > Verwendung von ~~~
      
      -Tags macht das ganze besser lesbar.  
      
      >   
      > »» Es gibt keine Fehlermeldung, aber die Variablen werden auch nicht eingesetzt.  
      >   
      > error_reporting auf E_ALL, display_errors auf on?  
      > Wie kontrolliert - Kontrollausgabe?  
      > Variablen vorhanden? (Warum so komisch benannt - sicher, dass du keine Arrays verwenden willst? Das ist fast immer der Fall, wenn jemand anfängt, Variablennamen "durchzunummerieren".)  
      >   
      
      Diese Variablen benutze ich weil es ein Beispiel ist.  
        
      
      > Dass die SQL-Syntax nicht mehr stimmt, sobald du da nicht-nummerische Werte verwendest, ist dir klar?  
      >   
      
      Nein, ist mir nicht klar, deswegen frage ich nach.  
        
      
      > Und informiere dich über SQL Injection, und was man dagagen unternehmen muss.  
      >   
      
      Habe eine "cleaner Funktion geschrieben, welche meine Variabeln "säubert".  
        
      echo $sql2; ergibt:  
        
      [code lang=sql]  
      UPDATE `database`.`table`  
      SET `Year` = 1234,  
      `Name` = '222222222222',  
      `Type` = '3333',  
      `KD` = '444',  
      `CT` = '555',  
      `size` = '66',  
      `rate` = '777777777',  
      `description` = '8888888888888'  
      WHERE `bicycles`.`NR` = 3 LIMIT 1;
      

      MfG ChrisB

      --
      gruss
      ghostflasher
      1. Hello,

          
          
        $sql2 =  
        "UPDATE `database`.`table`  
        SET  
          `Year` = '$var1',  
          `Name` = '$var2',  
          `Type` = '$var23',  
          `KD`   = '$var4',  
          `CT`   = '$var5',  
          `size` = '$var6',  
          `rate` = '$var7',  
          `description` = '$var8',  
        WHERE `table`.`NR` = 3 LIMIT 1';  
          
        
        

        Und informiere dich über SQL Injection, und was man dagagen unternehmen muss.

        Habe eine "cleaner Funktion geschrieben, welche meine Variabeln "säubert".

        Wenn Deine "cleaner function" mit der für die Datenbank passenden Funktion arbeitet, dann kannst Du das Statement auch so schreiben, wie oben dargestellt.

        Wenn Du ein Array für die Daten benutzt, dessen Werte Du dann mit mysql_(real_)escape_string() behandelt hast (geht NICHT für NULL und FALSE) dann kannst Du das Statement auch so schreiben, wie unten dargestellt.

          
          
        $sql2 =  
        "UPDATE `database`.`table`  
        SET  
          `Year` = '{$_sqldata[1]}',  
          `Name` = '{$_sqldata[2]}',  
          `Type` = '{$_sqldata[3]}',  
          `KD`   = '{$_sqldata[4]}',  
          `CT`   = '{$_sqldata[5]}',  
          `size` = '{$_sqldata[6]}',  
          `rate` = '{$_sqldata[7]}',  
          `description` = '$_sqldata[8]}',  
        WHERE `table`.`NR` = 3 LIMIT 1';  
          
        
        

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de