Hat mysql_real_escape_string() nicht behebbare Fehler?
Einige Skeptiker behaupten, dass die Funktion mysql_real_escape_string() grundsätzlich fehlerhaft ist und SQL-Abfragen nicht zuverlässig schützen kann . Sie verweisen auf veraltete Artikel als Beweismittel.
Kann es für benutzerdefinierte vorbereitete Anweisungen verwendet werden?
Trotz dieser Bedenken ist es immer noch möglich, mysql_real_escape_string() zum Erstellen zu nutzen individuell vorbereitete Abrechnungen. Es erfordert jedoch sorgfältige Aufmerksamkeit bei der Verarbeitung von Zeichensätzen.
Lösung:
Laut der MySQL-C-API-Dokumentation für mysql_real_escape_string() sollten Sie zum Festlegen mysql_set_character_set() verwenden der Zeichensatz. Dadurch wird sichergestellt, dass es sich auch auf den von mysql_real_escape_string() verwendeten Zeichensatz auswirkt.
Codebeispiel:
#include <mysql.h> int main() { MYSQL *conn = mysql_init(NULL); mysql_real_connect(conn, "localhost", "user", "password", "database", 0, NULL, 0); // Change the encoding using mysql_set_charset() mysql_set_charset(conn, "utf8"); // Create a custom prepared statement using mysql_real_escape_string() char query[1024]; mysql_real_escape_string(conn, query, "SELECT * FROM users WHERE username='test'", sizeof(query)); // Execute the query mysql_query(conn, query); mysql_close(conn); return 0; }
Indem Sie diesem Ansatz folgen und SET NAMES/SET CHARACTER SET vermeiden können Sie mysql_real_escape_string() effektiv nutzen, um Ihre SQL-Abfragen vor Injektionen zu schützen.
Das obige ist der detaillierte Inhalt vonKann mysql_real_escape_string() sicher mit benutzerdefinierten vorbereiteten Anweisungen verwendet werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!