2017-05-13 1 views
0

Vor kurzem entwickelte ich eine Software, die Daten in MySQL einfügt, aber jemand sagte mir, ich sollte Parameter verwenden. Ich habe sie gegoogelt, aber keine Daten gefunden.Einfügen von Daten in MySQL-Datenbank mit Parametern

Hier ist mein Code:

Dim Query As String 
Query = "insert into baza.artikli(kod,naziv,nabavna,prodazna,ddv,kolicina,opis,opis2,mkproizvod,profit,proizvoditel) values ('" & TextBoxBarkod.Text & "','" & TextBoxNaziv.Text & "','" & kupovnacena & "','" & prodaznacena & "','" & ddv & "','" & kolicina & "','" & TextBoxOpis.Text & "','" & TextBoxOpis2.Text & "','" & mkpr & "','" & profit & "','" & TextBoxProizvoditel.Text & "')" 
COMMAND = New MySqlCommand(Query, konekcija) 
READER = COMMAND.ExecuteReader 

Antwort

-1

Sie erste Frage zu beantworten:

Set
TextBoxBarkod.Text = "(select password from mysql.user where user=’root’)" 

Oder mit anderen Worten: für SQL-injection die Web-Suche.

Für ein Beispiel, wie Parameter verwendet werden, siehe z.B. this post.

+0

Das wird nicht funktionieren, nur knapp sein Ziel liefern alle Felder verhindern ... der Einsatz würde fehlschlagen und die Auswahl gewohnt passieren. Wenn der Einschub nur eine Spalte hätte, dann würde ja das funktionieren ... – Codexer

+0

Guter Punkt, zumindest hätte es einen Fehler erzeugt ;-). Einige Änderungen vorgenommen. – LSA

0

ich Sie SQL-Parameter wird dringend empfohlen beziehen verwenden. Dies dient zur Reduzierung von Syntaxproblemen, stoppt jedoch die SQL-Injektion. Weitere Informationen hierzu finden Sie unter Bobby Tables.

Ich habe auch festgestellt, dass Sie ExecuteReader verwenden. Dies wird normalerweise für ausgewählte Anweisungen verwendet. Für Einsätze und Updates sollten Sie ExecuteNonQuery verwenden. Werfen Sie einen Blick auf die für weitere Informationen.

Wenn Sie nicht bereits habe ich schlage vor, Sie auch Using implementieren:

Manchmal erfordert Ihr Code eine nicht verwaltete Ressource, wie ein Datei-Handle, ein COM-Wrapper oder eine SQL-Verbindung. Ein Benutzungsblock garantiert die Entsorgung einer oder mehrerer solcher Ressourcen, wenn Ihr Code mit ihnen fertig ist. Dies macht sie für anderen Code verfügbar.

Mit diesen Änderungen Ihr Code wie folgt aussehen würde:

Using con As New MySqlConnection(yourConnectionString), 
     cmd As New MySqlCommand("INSERT INTO baza.artikli (kod, naziv, nabavna, prodazna, ddv, kolicina, opis, opis2, mkproizvod, profit, proizvoditel) VALUES (@kod, @naziv, @nabavna, @prodazna, @ddv, @kolicina, @opis, @opis2, @mkproizvod, @profit, @proizvoditel)", con) 

    con.Open() 

    cmd.Parameters.Add("@kod", MySqlDbType.[Type]).Value = TextBoxBarkod.Text 
    cmd.Parameters.Add("@naziv", MySqlDbType.[Type]).Value = TextBoxNaziv.Text 
    cmd.Parameters.Add("@nabavna", MySqlDbType.[Type]).Value = kupovnacena 
    cmd.Parameters.Add("@prodazna", MySqlDbType.[Type]).Value = prodaznacena 
    cmd.Parameters.Add("@ddv", MySqlDbType.[Type]).Value = ddv 
    cmd.Parameters.Add("@kolicina", MySqlDbType.[Type]).Value = kolicina 
    cmd.Parameters.Add("@opis", MySqlDbType.[Type]).Value = TextBoxOpis.Text 
    cmd.Parameters.Add("@opis2", MySqlDbType.[Type]).Value = TextBoxOpis2.Text 
    cmd.Parameters.Add("@mkproizvod", MySqlDbType.[Type]).Value = mkpr 
    cmd.Parameters.Add("@profit", MySqlDbType.[Type]).Value = profit 
    cmd.Parameters.Add("@proizvoditel", MySqlDbType.[Type]).Value = TextBoxProizvoditel.Text 

    cmd.ExecuteNonQuery() 

End Using 

Bitte beachte, dass ich MySqlDbType.[Type] verwendet haben. Sie sollten [Type] durch den Datentyp ersetzen, den Sie in Ihrer Datenbank verwendet haben.

1

Zur Injektion

Hier ist ein Beispiel

Dim query As String 

query = "INSERT INTO Users (user_name) VALUES(?);" 
cmd = New MySqlCommand(query, con) 
cmd.Parameters.AddWithValue("?", Me.User_nameTextBox.Text) 
//Execute your command......