Insert in MYSQL DB klappt nicht

peper

Erfahrenes Mitglied
Hi,

mein Insert klappt irgendwie nicht ...
Und ich finde den Fehler irgendwie nicht.
Solangsam nervt es mich echt^^

Bei den var_dump befehlen kamen die richtigen werte heraus:
IP_neu == 192.168.0.112
Hostname_neu == 002786
Platznr == 5

Also alles nichts tragisches und trotzdem hängt es irgendwo.

Fehler:
HTML:
Ungültige Abfrage: 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 ''arbeitsplatz' ( 'IP' , 'Hostname' , 'Platz' at line 2



PHP:
    $result = mysql_query("SELECT * FROM arbeitsplatz",$db);
     if (!$result) {
    die('Ungültige Abfrage: ' . mysql_error());
      }

     $IP_neu = mysql_real_escape_string($_POST['IP_neu']);
     $Hostname_neu = mysql_real_escape_string($_POST['Hostname_neu']);
     $Platznr_neu = mysql_real_escape_string($_POST['Platznr_neu']);
     var_dump($Platznr_neu);
     var_dump($IP_neu);
     var_dump($Hostname_neu);
     $sql = "
      INSERT INTO
         'arbeitsplatz'
      (
         'IP' ,
         'Hostname' ,
         'Platznummer'
       )
       VALUES
       (
         '$IP_neu',
         '$Hostname_neu',
         '$Platznr_neu'
       )";
     $result = mysql_query($sql,$db);


LG Lars
 
Zuletzt bearbeitet:
Lass mal die Hochkommas weg:

PHP:
$result = mysql_query("SELECT * FROM arbeitsplatz",$db);
     if (!$result) {
    die('Ungültige Abfrage: ' . mysql_error());
      }

     $IP_neu = mysql_real_escape_string($_POST['IP_neu']);
     $Hostname_neu = mysql_real_escape_string($_POST['Hostname_neu']);
     $Platznr_neu = mysql_real_escape_string($_POST['Platznr_neu']);
     var_dump($Platznr_neu);
     var_dump($IP_neu);
     var_dump($Hostname_neu);
     $sql = "
      INSERT INTO
         arbeitsplatz
      (
         IP ,
         Hostname ,
         Platznummer
       )
       VALUES
       (
         $IP_neu,
         $Hostname_neu,
         $Platznr_neu
       )";
     $result = mysql_query($sql,$db);
 
SQL:
INSERT INTO `arbeitsplatz` (
    `IP`,
    `Hostname`,
    `Platznummer`
) VALUES (
    '$IP_neu',
    '$Hostname_neu',
    '$Platznr_neu'
);

Strings definieren sich in SQL durch "'" oder """, allgemeine Nicht-Steuer-Symbole und -Befehle werden durch "`" von eben diesen Steuersachen abgegrenzt. Die Spalten- und Feldbezeichnungen zB sind keine Steuerbezeichnungen und werden, sofern sie nicht kollidieren mit Steuerbefehlen, auch als solche identifiziert, aber um auf der sicheren Seite zu sein, werden sie meist über `bezeichner` gekennzeichnet. So ist es zB nicht möglich
SQL:
SELECT alter FROM `users`
auszuführen, da "ALTER" ein Befehl ist, aber es geht mit
SQL:
SELECT `alter` FROM `users`
aber nicht mit
SQL:
SELECT 'alter' FROM `users`
Da ein String nach dem Syntax an dieser Stelle nicht erwartet wird.

@d2wap: Dort, wo die String-Bezeichner hingehören, sollten sie nicht weggemacht werden: Die Werte sollten doch schon noch als Strings gekennzeichnet bleiben um auf der sicheren Seite zu parken.
 
Ok es hat sich etwas an der Fehlermeldung getan^^

Code:
Ungültige Abfrage: 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 '.0.112, WIK002786, 5 )' at line 10
 
VALUES( ... )

Da gibt es eine einfache Regel:
Je nach Datentyp muss ein ' gesetzt werden oder nicht.
' brauch man bei VARCHAR oder TEXT, also immer, wo Strings gespeichert werden.

Zahlen werden nicht escaped, also kein ' !

Beispiel:
SQL:
INSERT INTO users (UserID, Username, eMail) VALUES (1, 'Radhad', 'webmaster@example.com');
Das sollte wohl weiterhelfen. Die `` schreibe ich eigentlich nie und hab auch keine Fehlermeldungen bisher dadurch bekommen!


Gruß Radhad
 
".0.112" Was denn das? :eek: ^^

RadHad: Ist so nicht ganz wahr. Den Typ gibt die Spaltendefinition her, also ist es nicht weiter wichtig, ob Zahlenwerte umschlossen werden oder nicht. Würde es aus reiner Ästhetik immer in '' schreiben, da ich so sehe, was Werte sind und was nicht ;)

(Klug: Escapen ist was anderes)

Und schon allein aus rein ästhetischen Gründen würde ich `` um alle Feld- und Tabellenbezeichnungen klatschen, da so gleich sichtbar wird, dass es kein Steuersymbol oder ähnliches ist. Soll aber jeder für sich selbst festmachen - Hauptsache, man kommt damit selbst klar :)
 
Zurück