EKKi: korrekte schreibweise von SQL-Statements

Beitrag lesen

Mahlzeit Tom,

bis hier IMHO gut erklärt.

Wer macht hier mal weiter?

Ich versuch's mal:

Weiters wundert mich, dass im folgenden mysql_query die Variablen direkt im String stehen und das auch funktioniert.

z.B.
mysql_query("INSERT INTO tabelle1 (wert1,wert2) VALUES ('$value1', '$value2')")

In dem Fall gibt es natürlich spätestens dann ein Problem, wenn in einer der Variablen ein String enthalten ist, der einzelne Hochkommata (') enthält. Darüber hinaus *kann* diese Schreibweise Probleme erzeugen, wenn es möglich ist, mehrere SQL-Abfragen in einem Rutsch an die Datenbank zu schicken (Stichwort: "SQL-Injection"). Man stelle sich vor, in der Variablen namens "$value1" würde der String "foo', 'bar'); DELETE FROM tabelle1; --" stehen ... PHP würde daraus insgesamt folgenden String machen:

"INSERT INTO tabelle1 (wert1,wert2) VALUES ('foo', 'bar'); DELETE FROM tabelle1; --', 'hier würde der Wert der zweiten Variable stehen')"

Was würde die Datenbank wohl daraus machen?

Ich hätte es eher so gemacht:
mysql_query("INSERT INTO tabelle1 (wert1,wert2) VALUES ('".$value1."', '".$value2."')")

Ich nicht - vor allem deshalb nicht, weil sich an der o.g. Problematik nichts ändert. Ich würde eher suits Empfehlung folgen und die Geschichte folgendermaßen schreiben:

mysql_query([link:http://de.php.net/manual/de/function.sprintf.php@title=sprintf]("INSERT INTO tabelle1 (wert1,wert2) VALUES ('%s', '%s')", [link:http://de.php.net/manual/de/function.mysql-real-escape-string.php@title=mysql_real_escape_string]($value1), mysql_real_escape_string($value2)));

Bitte um Hilfe wie man es nun richtig macht. Ich will es mir nicht falsch angewöhnen.

Ein guter Vorsatz!

MfG,
EKKi

--
sh:( fo:| ch:? rl:( br:> n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|