[PHP&MySQL]Fehler bei der UPDATE Syntax

08/01/2012 02:19 .Dêvile-#1
Hallo elitepvpers,

ich habe da ein Problem bei dem Updaten von einer Zelle.

Fehlermeldung:

Code:
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 'character=testcharacter WHERE name=test' at line 2
PHP Code:

Code:
mysql_query("
UPDATE accounts
SET character=$charname
WHERE name=".$_SESSION['login']."
")or die(mysql_error());
Mit freundlichen Grüßen, Son~Goku.
08/01/2012 09:46 sava#2
PHP Code:
mysql_query("
UPDATE `accounts`
SET `character`=
$charname
WHERE `name`="
.$_SESSION['login']."
"
)or die(mysql_error()); 
Probiers mit backticks.
08/01/2012 11:49 epiTR#3
PHP Code:
mysql_query("
UPDATE `accounts`
SET `character`= '"
.$charname."'
WHERE `name`= '"
.$_SESSION['login']."'
"
)or die(mysql_error()); 
Ein String muss zwischen zwei Apostrophen stehen.
08/01/2012 13:43 .Acu³#4
Und wenn ich dir noch einen Tipp geben darf, wenn es nicht klappt führ das einfach in phpmyadmin aus und im Falle eines Fehlers findest du so schnell raus wo der Fehler liegt.
08/01/2012 15:57 Glupschi1992#5
Tjoa wenn du die Leute denen du Aufträge für deine Homepage gibst auch bezahlen würdest hättest du solche probleme nicht. :)
08/04/2012 13:52 dowhile#6
Es muss nicht jeder String zwischen zwei Apostrophen stehen, sondern nur wenn ein Schlüsselwort als String verwendet werden soll. Hier wäre das "character". Natürlich empfiehlt es sich deshalb, gleich jeden String zwischen zwei Apostrophen zu plazieren, das ist sonst zu fehleranfällig.
Ferner würde ich dir noch empfehlen, die Werte, die du als PHP Variablen einsetzt, in Hochkommas zu setzen. Sonst ist dein Skript gegen SQL-Injektionen nicht gesichert.

Angenommen $charname besitzt den Wert "god WHERE name=bla --", dann heißt dein Query: "UPDATE accounts SET character=god WHERE name=bla -- ...". Die Funktion mysql_real_escape_string() bringt dir hier nichts mehr, denn der Angreifer braucht gar keine Hochkommas mehr, um dein Query zu modifizieren.