MySQL Query richtig formatieren
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
beispiel
code
dank
datenbank
eingabe
ende
ersetzen
extremes sicherheitsrisiko
folgenden befehl
funktioniert code
normalen eingaben
part
problem
rest
stichwort
string
tip
verstehen
-
Ich verwende folgenden Befehl, um in die Datenbank zu schreiben:
$com = "INSERT INTO $tablename($parts[0],$parts[1],$parts[2],$parts[3],$parts[4],$parts[5]) VALUES('$name','$shortname','$allianceid','$executorcorpid','$membercount','$startdate')";
Mein Problem ist jetzt nicht die Abfrage selbst (die funktioniert prima) sondern die Werte in den Variablen.
Ich geb am besten einfach mal zwei Beispiele
Mal angenommen wir ersetzen die Variablen bei "VALUES" mit ihren Werten....
Diese Abfrage funktioniert:
$com = "INSERT INTO $tablename($parts[0],$parts[1],$parts[2],$parts[3],$parts[4],$parts[5]) VALUES([b]'Charlys Shop','CS','1234','1234','1234','2010-02.11 13:12:11'[/b])";
Diese Abfrage liefert einen Error:
$com = "INSERT INTO $tablename($parts[0],$parts[1],$parts[2],$parts[3],$parts[4],$parts[5]) VALUES([b]'Charly's Shop','CS','1234','1234','1234','2010-02.11 13:12:11'[/b])";
Das Problem bei der Abfrage, die mir den Error liefert, ist das Hochkomma ('s) bei 'Charly's Shop'.
Dieses Hochkomma deutet der String als Ende des Wertes (also 'Charly''s Shop anstatt 'Charly's Shop')....da das aber falsch ist, wird die Abfrage nicht richtig geschlossen.
Das führt dazu, das von 1796 Datensätzen nur 1753 geschrieben werden, weil der Rest ein Hochkomma im Namen hat und daher "gebrochen" ist.
Wie bringe ich jetzt MySQL dazu, diesen String richtig zu verstehen und ihn mitsamt dem Hochkomma in die Datenbank einzutragen?
Beitrag zuletzt geändert: 13.10.2010 9:30:45 von adelwoehrer -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
mit
kannst du den string richtig "escapen". also aus ' wird \' aus " wird \".$var = mysql_real_escape_string($var);
mfg
Beitrag zuletzt geändert: 13.10.2010 9:53:26 von syberpsace -
Abgesehen davon, dass die Query nicht funktioniert, wenn Hochkommas in der Eingabe sind ist eine solche Query ein extremes Sicherheitsrisiko!!
Das Stichwort hier heißt Mysql injection.
Stell dir mal diese Abfrage vor:
SELECT * FROM `users` WHERE (`Nick` = '$nick' AND `Password` = '$password')
Bei normalen Eingaben tut's das, was es soll. Aber was passiert, wenn einer als Passwort nicht nur ein Passwort, sondern das hier eintippt:
') OR ('1' = '1
Dann wird aus der bisherigen Query auf einmal das hier:
SELECT * FROM `users` WHERE (`Nick` = '$nick' AND `Password` = '') OR ('1' = '1')
Un ddass das nich gut ist ist wohl klar.
Deshalb vor jeder Abfrage
$nick = mysql_real_escape_string($nick); $password = mysql_real_escape_string($password); $sql = "SELECT * FROM `users` WHERE (`Nick` = '$nick' AND `Password` = '$password')"
-
Danke für die Tipps, hab ich so umgesetzt.
Querys werden jetzt alle erledigt und die escapes sind auch überall gesetzt, wo sie sein sollten. =)
Dankeschön. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage