Heim  >  Artikel  >  Datenbank  >  Warum schlägt meine vorbereitete C#-Anweisung mit MySQL fehl, eine reguläre Anweisung funktioniert jedoch?

Warum schlägt meine vorbereitete C#-Anweisung mit MySQL fehl, eine reguläre Anweisung funktioniert jedoch?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-16 15:32:03300Durchsuche

Why Does My C# Prepared Statement with MySQL Fail, But a Regular Statement Works?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn