最近我开发了一些将数据插入MySQL的软件,但有人告诉我应该使用参数。我用谷歌搜索了他们,但没有找到任何数据。
这是我的代码:
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
答案 0 :(得分:1)
预防注射
这是一个例子
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......
答案 1 :(得分:0)
请查看Prepared Statements
https://dev.mysql.com/doc/refman/5.7/en/sql-syntax-prepared-statements.html
答案 2 :(得分:0)
我强烈建议您使用SQL参数。这是为了减少语法问题,但更重要的是停止SQL注入。有关详细信息,请参阅Bobby Tables。
我还注意到您正在使用ExecuteReader
。这通常用于select语句。对于插入和更新,您应该使用ExecuteNonQuery
。有关详细信息,请查看documentation。
如果您还没有,我还建议您实施Using:
有时,您的代码需要非托管资源,例如文件句柄,COM包装器或SQL连接。使用块可确保在代码完成后处理一个或多个此类资源。这使得它们可供其他代码使用。
通过这些更改,您的代码将如下所示:
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
请注意,我使用了
MySqlDbType.[Type]
。您需要将[Type]
替换为您在数据库中使用的数据类型。
答案 3 :(得分:-1)
首先回答你的问题: 设置
TextBoxBarkod.Text = "(select password from mysql.user where user=’root’)"
或换句话说:在网上搜索SQL-injection。
有关如何使用参数的示例,请参阅例如this post