Fehlerbehebung bei Problemen mit vorbereiteten Anweisungen in C# mit MySql
Sie sind beim Implementieren einer vorbereiteten Anweisung in Ihrem C#-Programm auf einen Stolperstein gestoßen. Beim Übergang zu einer regulären Anweisung funktioniert Ihr Code nahtlos und lässt Sie verwirrt zurück. Lassen Sie uns den möglichen Grund für diese Diskrepanz untersuchen.
In dem von Ihnen bereitgestellten Codeausschnitt:
cmd = new MySqlCommand("SELECT * FROM admin WHERE admin_username='@val1' AND admin_password=PASSWORD('@val2')", MySqlConn.conn); //cmd.Prepare(); //cmd.Parameters.AddWithValue("@val1", tboxUserName.Text); //cmd.Parameters.AddWithValue("@val2", tboxPassword.Text); cmd = new MySqlCommand("SELECT * FROM admin WHERE admin_username='"+tboxUserName.Text+"' AND admin_password=PASSWORD('"+tboxPassword.Text+"')", MySqlConn.conn);
Der Hauptunterschied liegt in der Verwendung von einfachen Anführungszeichen ('') in der SQL-Abfrage. Vorbereitete Anweisungen nutzen Parameterplatzhalter (@val1, @val2), um SQL-Injection-Angriffe zu verhindern. Wenn Sie reguläre Anweisungen verwenden, müssen Sie die einfachen Anführungszeichen in der Abfrage selbst maskieren.
Um dieses Problem zu beheben, sollten Sie Ihren Code wie folgt ändern:
cmd = new MySqlCommand("SELECT * FROM admin WHERE admin_username=@val1 AND admin_password=PASSWORD(@val2)", MySqlConn.conn); cmd.Parameters.AddWithValue("@val1", tboxUserName.Text); cmd.Parameters.AddWithValue("@val2", tboxPassword.Text); cmd.Prepare();
Indem Sie die einfachen Anführungszeichen ' aus entfernen Durch die Abfrage und die Verwendung von cmd.Prepare() nach dem Hinzufügen von Parametern stellen Sie sicher, dass die vorbereitete Anweisung funktionsfähig ist. Dieser Ansatz schützt Ihren Code vor böswilligen Injektionen und erhöht seine Sicherheit.
Das obige ist der detaillierte Inhalt vonWarum schlägt meine vorbereitete C#-Anweisung mit MySQL fehl, eine reguläre Anweisung funktioniert jedoch?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!