Tach!
Bei einer Anfrage über ein Formular, wird ein Wort per POST an eine weitere Seite übergeben. Von dort aus soll es in der Datenbank eine Abfrage geben.
$sql = "SELECT * FROM tabelle WHERE spalte='$_POST['formularwort']'";
sicherer wäre wohl
$_POST['formularwort'] = stripslashes($_POST['formularwort']); $_POST['formularwort'] = mysql_real_escape_string($_POST['formularwort']);
stripslashes() braucht man nicht mehr, weil das Feature namens Magic Quotes schon lange nicht mehr in PHP enthalten ist. Das mysql_real_escape_string() ist an der Stelle auch nicht sinnvoll. Innerhalb des Scripts möchte man mit dem Originalwert arbeiten und nur wenn es in eine bestimmte Ausgabe geht, muss man zu diesem Zeitpunkt und für diese Ausgabe spezifisch die Behandlung vornehmen. Abgesehen davon ist die mysql-ohne-i-Extension auch nicht mehr aktuell.
und dann
$sql = "SELECT * FROM tabelle WHERE spalte='mysqli_real_escape_string($_POST['formularwort'])'";
oder geht es besser, einfacher, sicherer?
Nur das ist sinnvoll - wenn es syntaktisch richtig notiert wird.
$sql = "SELECT * FROM tabelle WHERE spalte='" .
mysqli_real_escape_string($_POST['formularwort']). "'";
oder mit Platzhaltern und sprintf(), damit der Statement-String nicht dauernd unterbrochen wird:
$sql = sprintf("SELECT * FROM tabelle WHERE spalte='%s'",
mysqli_real_escape_string($_POST['formularwort']));
Zusätzlich gibt es noch Prepared Statements. Wenn die richtig angewendet werden, gehen die Daten einen eigenen Weg und müssen nicht so aufbereitet werden, dass sie sich korrekt in die Statement-Syntax einfügen lassen.
Wir haben das Thema auch im Wiki aufbereitet: Kontextwechsel.
dedlfix.