Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Kann mysql_real_escape_string nicht verwenden

Erster Punkt:Wenn Sie einen Fehler von mysql_real_escape_string() erhalten , weil Sie die Funktion aufrufen, bevor Sie mit der Datenbank verbunden sind.

Es sieht so aus, als würden Sie direkt vor dem Ausführen einer Abfrage eine Verbindung zur Datenbank herstellen. Also alles, was Sie tun, bevor Sie Ihre mm_mysqlquery() aufrufen Funktion hat keine Verbindung.

Der mysql_real_escape_string() Die Funktion benötigt eine Live-Verbindung zur Datenbank, damit sie die richtige Art von Escapezeichen in Bezug auf den Zeichensatz der Verbindung ausführen kann. Sie müssen also vorher eine Verbindung herstellen du entkommst.

Es ist sowieso besser, dies zu tun, denn wenn Sie im Verlauf einer einzigen PHP-Anfrage mehrere Abfragen durchführen, ist es weniger Aufwand, sich einmal zu verbinden und verwenden Sie dieselbe Verbindung für alle Ihre Abfragen.

Zweitens nehmen Sie bitte keine Vorschläge zur Verwendung von addslashes() an -- es macht nicht dasselbe wie mysql_real_escape_string() . Die beiden sind nicht austauschbar. Sie sollten sich angewöhnen, mysql_real_escape_string() zu verwenden .

Drittens Ihr sani() Funktion zeigt ein weit verbreitetes Missverständnis.

function sani($string){     
  $string = strip_tags($string); 
  $string = htmlspecialchars($string); 
  $string = trim(rtrim(ltrim($string))); 
  $string = mysql_real_escape_string($string);
  return $string;
}

Das häufige Missverständnis ist, dass Sie alle diese Funktionen benötigen, um eine Zeichenfolge in einer SQL-Anweisung sicher zu machen. Du nicht. Nur mysql_real_escape_string() ist notwendig. Alle anderen Funktionen in diesem Beispiel schützen nicht vor SQL-Injection.

Diese Funktionen sind nützlich, wenn Sie einen String in einer HTML-Präsentation ausgeben und das Risiko von XSS-Angriffen verringern möchten, aber dann mysql_real_escape_string() ist irrelevant.

Verwenden Sie jede Art von Bereinigungsmethode in ihrem entsprechenden Kontext.