kostenloser Webspace werbefrei: lima-city


MySQL Query richtig formatieren

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    adelwoehrer

    Kostenloser Webspace von adelwoehrer

    adelwoehrer hat kostenlosen Webspace.

    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
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. mit
    $var = mysql_real_escape_string($var);
    kannst du den string richtig "escapen". also aus ' wird \' aus " wird \".

    mfg

    Beitrag zuletzt geändert: 13.10.2010 9:53:26 von syberpsace
  4. 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')"

  5. Autor dieses Themas

    adelwoehrer

    Kostenloser Webspace von adelwoehrer

    adelwoehrer hat kostenlosen Webspace.

    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.
  6. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!